シロイヌナズナの遺伝子配列が記載されたFASTAファイルをhttps://www.arabidopsis.org/download_files/Genes/TAIR6_genome_release/TAIR6_seq_20060907 からダウンロードする。(wgetコマンドを使用)
1.FASTAファイルのレコード数(遺伝子数)を算出せよ
FASTAファイルのレコードは”>”から始まります。 1文字目を切り出すには・・・substr($0,1,1)
awk ' { if(substr($0,1,1)==">"){ cnt=cnt+1 } } END{ print cnt } ' TAIR6_seq_20060907
35351
2.塩基配列の平均長を算出せよ
改行を考慮して各レコードの塩基配列長を取得して下さい。 (本来は改行コードをod -c で確認する必要あり。)
awk ' { if(substr($0,1,1)==">"){ if(NR>1){ print "previous read length:" readlen; cntbp=cntbp+readlen; cnt=cnt+1; } readlen=0; }else{ readlen=readlen+length($0); } } END{ print "previous read length:" readlen; cntbp=cntbp+readlen; cnt=cnt+1; print cntbp/cnt } ' TAIR6_seq_20060907
2229.55
3.最大、最小の配列長を算出せよ
awk ' BEGIN{min=1e+10} #<=10,000,000,000のこと { if(substr($0,1,1)==">"){ if(NR>1){ if(readlen>max){max=readlen} if(readlen<min){min=readlen} } readlen=0; }else{ readlen=readlen+length($0); } } END{ if(readlen>max){max=readlen} if(readlen<min){min=readlen} print max, min } ' TAIR6_seq_20060907
max: 31258 min: 22
1.Day1の時に使用したOSシェア別割合のデータinput.txtを連想配列に読み込む。(OS名をキーとして配列を作成する)
awk ' { data[$1]=$2 } ' input.txt
2.ChromeOSのシェアを%付きで表示する
awk ' { data[$1]=$2 } END{ print data["ChromeOS"]; } ' input.txt
3.シェアの高い順にOSを表示する
awk ' { data[$1]=$2 } END{ PROCINFO["sorted_in"]="@val_num_desc"; for(i in data){ print i"\t"data[i]; } } ' input.txt
4.OSの名前順(辞書順)にOS, シェアをタブ区切りで表示する。タブ文字はAWKでは“\t”です。
awk ' { data[$1]=$2 } END{ PROCINFO["sorted_in"]="@ind_str_asc"; for(i in data){ print i"\t"data[i]; } } ' input.txt
5.先頭の3文字が「Win」、「Mac」、「Lin」、「Chr」、「Unk」のOSシェアを集計し、シェアの高い順に上記5個のカテゴリをシェアとともに表示する。
awk ' { data[substr($1,1,3)]=data[substr($1,1,3)]+$2 } END{ PROCINFO["sorted_in"]="@val_num_desc"; for(i in data){ print i"\t"data[i]; } } ' input.txt
4.FASTAファイルを読み込み、「配列の名前(タブ「\t」)配列」と1レコード1行のタブ区切りで表示するようにせよ
ヒント:AWKの特殊変数であるORS(出力の区切り文字)を変更する =>デフォルトは\n
配列の名前の行で改行し、それ以外の行では区切り文字なし(“”)で出力してみる
2文字目以降を切り出す場合は、単にsubstr($1,2)
とすればよい。
5.4.のタブ区切りテキストを用いて配列を長い順に表示し、ファイルに保存せよ ファイルに保存する際は、 awk '{…}' > filename とすればよい。