2022awk2回答例

練習問題2-2

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.塩基配列の平均長を算出せよ

seqkitでFASTA→TABに変換したファイルを利用する。区切り文字を指定する-F'\t'を忘れないこと。

awk -F'\t' '
{
  cnt = cnt + length($2);
  n = n + 1;
}
END{
  print cnt / n;
}
' TAIR6_seq_20060907.tab

2227.59

3.最大、最小の配列長を算出せよ

awk -F'\t' '
BEGIN{min=1e+10} #<=10,000,000,000のこと
{
  len=length($2)
  if(len>max){max=len}
  if(len<min){min=len}
}
END{
  print max, min
}
' TAIR6_seq_20060907.tab

max: 31258 min: 22

4.配列を長い順に表示

awk -F'\t' '
{
    data[$1]=length($2);
    seq[$1]=$2;
}

END{
    PROCINFO["sorted_in"]="@val_num_desc";
    for(i in data){
        print data[i]": "i"\t"seq[i];
    }
}' TAIR6_seq_20060907.tab

Fatal error: Allowed memory size of 536870912 bytes exhausted (tried to allocate 4096 bytes) in /home/webpark1634/www/yosh/lib/plugins/authplain/auth.php on line 441

Fatal error: Allowed memory size of 536870912 bytes exhausted (tried to allocate 20480 bytes) in /home/webpark1634/www/yosh/inc/ErrorHandler.php on line 83