練習問題
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*