2日目練習問題①の続き
4.FASTAファイルを「名前(タブ「\t」)配列」と1レコード1行のタブ区切りで表示するようにせよ ヒント:特殊変数であるORS(改行文字)を変更し、名前の行の時はタブ区切り、それ以外の行の時は区切り文字なしで出力する。
awk ' { if(substr($0,1,1)==">"){ ORS="\t"; if(NR>1){ print "\n"substr($0,2); }else{ print substr($0,2); } }else{ ORS=""; print $0; } } END{ ORS="\n"; print ""; } ' TAIR6_seq_20060907 > TAIR6_seq_20060907.tab.txt
5.4.のタブ区切りテキストを用いて配列を長い順に表示し、ファイルに保存せよ ファイルに保存する際は、 awk '{…}' > filename とすればよい。
awk -F'\t' ' { data[$1]=length($NF); } END{ PROCINFO["sorted_in"]="@val_num_desc"; for(i in data){ print i"\t"data[i]; } } ' TAIR6_seq_20060907.tab.txt > TAIR6_seq_20060907.tab.sort.txt
練習問題①
16S + 18S rDNAのデータベースであるSILVAの配列名の行だけを抽出したファイルを下記の通りダウンロードする。
wget http://www.suikou.fs.a.u-tokyo.ac.jp/yosh_data/2018train/SILVA_128_SSURef_Nr99_tax_silva.fasta.name
中身は
>[配列名(スペースは含まない)][スペース][分類名(スペースを含む)]
となっている。
1.「Bacteria」という文字列が含まれる行を抽出せよ。
awk ' { if($0~"Bacteria"){cnt=cnt+1} } END{ print cnt; } ' SILVA_128_SSURef_Nr99_tax_silva.fasta.name
2.分類名が「Bacteria」という文字列で始まる行のみ抽出せよ。
例1:
awk ' { if($2~"^Bacteria"){cnt=cnt+1} } END{ print cnt; } ' SILVA_128_SSURef_Nr99_tax_silva.fasta.name
例2:
awk ' { if($0~"^>[^ ]+ Bacteria"){cnt=cnt+1} } END{ print cnt; } ' SILVA_128_SSURef_Nr99_tax_silva.fasta.name
3.ドメインがBacteria、 Eukaryotaに属する生物はそれぞれいくつ登録されているか?
awk ' { if($2~"^Bacteria"){cnt=cnt+1} else if($2~"^Eukaryota"){cnt2=cnt2+1} } END{ print "Bacteria: "cnt", Eukaryota: "cnt2; } ' SILVA_128_SSURef_Nr99_tax_silva.fasta.name