練習問題

wget http://www.suikou.fs.a.u-tokyo.ac.jp/yosh_data/2018train/sample1.fasta.gz
wget http://www.suikou.fs.a.u-tokyo.ac.jp/yosh_data/2018train/sample2.fasta.gz
wget http://www.suikou.fs.a.u-tokyo.ac.jp/yosh_data/2018train/sample3.fasta.gz
wget http://www.suikou.fs.a.u-tokyo.ac.jp/yosh_data/2018train/sample4.fasta.gz
gzip -d sample*.fasta.gz
として練習用のVCFファイルをダウンロードして解凍する。
上記ファイルは抗体可変領域のアンプリコンシーケンスデータである。

1.上記FASTAファイルの奇数行は配列名、偶数行は配列であることを確認せよ。

#奇数行が配列名ではない場合を出力=>0件であることを確認
awk '{if(NR%2==1 && $0!~"^>"){print $0}}' sample1.fasta
#偶数行が配列ではない場合を出力
awk '{if(NR%2==0 && $0~"^>"){print $0}}' sample1.fasta

2.サンプル1のFASTAファイル中で出現回数の多い順に、回数とともに配列を出力せよ。

awk '
 {if(NR%2==0){data[$0]=data[$0]+1}}
 END{
  PROCINFO["sorted_in"]="@val_num_desc";
  for(i in data){print i,data[i]}
 }
' sample1.fasta

3.サンプル2~4のファイルについても同様に配列の出現回数を求め、下記のように統合された出現頻度一覧表を作成せよ。

ヒント: awkの特別な変数「FILENAME」や配列「ARGV」を使います。

sample1sample2sample3sample4
AAAAAAA13000
AAAACCC0150
AAGGTTT10510
awk '
{
 if(FNR%2==0){
  data[$0][FILENAME]++;
 }
} 
END{
 ORS="";
 for(i in data){
  print i;
  for(j=1;j<length(ARGV);j++){  #ARGV[0]にはプログラムの名前(この場合は「awk」という文字列)が入っているため除く
   if(data[i][ARGV[j]]==""){data[i][ARGV[j]]=0};
   print "\t"data[i][ARGV[j]];
  }
  print "\n"
 }
}' sample*

4.連結した一覧表について、sample1で出現回数の多い順に表示せよ。  また、sample4で出現回数の多い順にも表示せよ。

awk '
{
 if(FNR%2==0){
  data[$0][FILENAME]++;
  if(FILENAME==ARGV[1]){              #sort用に配列を別途準備しておく
   dataforsort[$0]=dataforsort[$0]+1; #ファイル名がARGV[1]の時はカウンタを回し、
  }else{
   dataforsort[$0]=dataforsort[$0]+0; #そうでないときは単にindexとしてシーケンスを挿入しておく
  }
 }
} 
END{
 ORS="";
 PROCINFO["sorted_in"]="@val_num_desc";
 for(i in dataforsort){              #ARGV[1]の出現頻度順で出てくる
  print i;
  for(j=1;j<length(ARGV);j++){
   if(data[i][ARGV[j]]==""){data[i][ARGV[j]]=0};
   print "\t"data[i][ARGV[j]];
  }
  print "\n"
 }
}' sample*