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

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 とすればよい。


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
dokuwiki\Exception\FatalException: Allowed memory size of 536870912 bytes exhausted (tried to allocate 4096 bytes)

dokuwiki\Exception\FatalException: Allowed memory size of 536870912 bytes exhausted (tried to allocate 4096 bytes)

An unforeseen error has occured. This is most likely a bug somewhere. It might be a problem in the authplain plugin.

More info has been written to the DokuWiki error log.