2018awk2回答例

練習問題①

シロイヌナズナの遺伝子配列が記載された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

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

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){mimn=readlen}

  print max, min
}
' TAIR6_seq_20060907

練習問題②

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
  • 2018awk2回答例.1537866882.txt.gz
  • 最終更新: 2019/07/15 02:46
  • (外部編集)