2018awk3回答例

2日目練習問題①の続き

4.FASTAファイルを「名前(タブ「\t」)配列」と1レコード1行のタブ区切りで表示するようにせよ ヒント:特殊変数であるORS(改行文字)を変更し、名前の行の時はタブ区切り、それ以外の行の時は区切り文字なしで出力する。

awk '
{
  if(substr($0,1,1)==">"){
    ORS="\t";
    if(NR>1){
      print "\n"substr($0,2);
    }else{
      print substr($0,2);
    }
  }else{
    ORS="";
    print $0;
  }
}
END{
  ORS="\n";
  print "";
}
' TAIR6_seq_20060907 > TAIR6_seq_20060907.tab.txt

5.4.のタブ区切りテキストを用いて配列を長い順に表示し、ファイルに保存せよ ファイルに保存する際は、 awk '{…}' > filename とすればよい。

awk -F'\t' '
{
  data[$1]=length($NF);
}
END{
  PROCINFO["sorted_in"]="@val_num_desc";
  for(i in data){
    print i"\t"data[i];
  }
}
' TAIR6_seq_20060907.tab.txt > TAIR6_seq_20060907.tab.sort.txt 

練習問題①

16S + 18S rDNAのデータベースであるSILVAの配列名の行だけを抽出したファイルを下記の通りダウンロードする。

wget http://www.suikou.fs.a.u-tokyo.ac.jp/yosh_data/2018train/SILVA_128_SSURef_Nr99_tax_silva.fasta.name

中身は

>[配列名(スペースは含まない)][スペース][分類名(スペースを含む)]

となっている。

1.「Bacteria」という文字列が含まれる行を抽出せよ。

awk '
{
  if($0~"Bacteria"){cnt=cnt+1}
}
END{
  print cnt;
}
' SILVA_128_SSURef_Nr99_tax_silva.fasta.name

2.分類名が「Bacteria」という文字列で始まる行のみ抽出せよ。

例1:

awk '
{
  if($2~"^Bacteria"){cnt=cnt+1}
}
END{
  print cnt;
}
' SILVA_128_SSURef_Nr99_tax_silva.fasta.name

例2:

awk '
{
  if($0~"^>[^ ]+ Bacteria"){cnt=cnt+1}
}
END{
  print cnt;
}
' SILVA_128_SSURef_Nr99_tax_silva.fasta.name

3.ドメインがBacteria、 Eukaryotaに属する生物はそれぞれいくつ登録されているか?

awk '
{
  if($2~"^Bacteria"){cnt=cnt+1}
  else if($2~"^Eukaryota"){cnt2=cnt2+1}
}
END{
  print "Bacteria: "cnt", Eukaryota: "cnt2;
}
' SILVA_128_SSURef_Nr99_tax_silva.fasta.name

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

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