練習問題
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」を使います。
| sample1 | sample2 | sample3 | sample4 | |
| AAAAAAA | 13 | 0 | 0 | 0 |
| AAAACCC | 0 | 1 | 5 | 0 |
| AAGGTTT | 1 | 0 | 5 | 10 |
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*