文書の表示以前のリビジョンバックリンク文書の先頭へ この文書は読取専用です。文書のソースを閲覧することは可能ですが、変更はできません。もし変更したい場合は管理者に連絡してください。 # 練習問題① シロイヌナズナの遺伝子配列が記載された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 とすればよい。 2018awk2回答例.txt 最終更新: 2019/07/15 02:46by 127.0.0.1