Mac の awk コマンド

informatics/commands_mac/awk_mac
2018/02/05 更新

  1. 概要: awk の使い方
  2. 実例1: awk で fastq ファイルから fasta ファイルを作る

広告

概要: awk の使い方

awk (オークと読む) は Macterminal で使えるコマンドの一つであるが、他のコマンドとは少し違っていて、それ自体が一つのスクリプト言語である (2)。

つまり、同じくテキスト処理に使われる grepcut よりも高度なスクリプトが書きやすいらしい。

awk は、以下の 3 つの基本動作を指定したファイルに対して行う (1)。

  1. テキストを 1 行読み込む。
  2. スペースを区切り文字のデータとして解釈する。最初のスペースまでが $1、次のスペースまでが $2 のように表される。
  3. それぞれの区切りに対して、指定された処理をする。

awk コマンドを実行する際には、3 の「処理」を指定することになる。


広告

実例1: awk で fastq ファイルから fasta ファイルを作る

fastq ファイルとは、次世代シークエンスのデータを SRA データベースからダウンロードしたときのフォーマットであり、一つの配列が以下の 4 行にわたって情報を含んでいる。

  1. 1 行目は @、配列 ID および配列の説明 (optional)。FASTA の > の行に相当する。
  2. 2 行目は配列。折り返しは最近では認められない。
  3. 3 行目は +。その後ろに ID がつくこともあるようだ。
  4. 4 行目は、2 行目に記した配列のクオリティ値。それぞれの塩基にこの値があるので、2 行目と 4 行目の文字数は同じになる。

@Seq_ID Additional informations (optional)
AAAGGGTTTTTTTTTTTCCCCCCCCCCCGGGGGGGG
+
IIIIIIIIIIIIIIIIIIIIIIIIIIIIII9IG9IC


このサイトでは、以下のようなページが関係している。


FASTA は 1 行目に > と配列情報、2 行目に配列という単位が複数の配列について繰り返される形式である。したがって、awk を使って下す命令は以下のようになる。

  1. fastq ファイルから 1 および 2 行目を抜き出す。
  2. 1 行目の先頭に > を追加し、別のファイルに書き出す。
  3. これをすべての配列セットについて繰り返す。

コマンドは次のようになる。


cat file1.fastq | awk 'NR % 4 == 1 {print ">" $0} NR % 4 == 2 {print $0}' > file1.fasta


  • cat で file1.fastq というファイルを読み込み、それを | で awk にパイプする。
  • ' ' で囲った部分が awk の命令。NR は現在処理している行を、% は除算。NR % 4 == 1 は、「現在処理している行を 4 で割ったら 1 余る場合」、すなわち 1、5、9... 行目に関する指定である。
  • 上の行に > を加えて、file1.fasta というアウトプットファイルの $0 にプリントする。
  • $0 は awk の組み込み関数で、全ての行の内容が入る場所として扱われる。つまり「a (スペース) b (スペース)c」という行があれば、$1 = a, $2 = b, $3 = c, $0 = a b c である。
  • 同様に、NR % 4 == 2 は 2、6、10... 行目の内容、すなわち配列である。この場合 > は追加せずに、そのまま print すればよい。

fastq から fasta を作るには、FASTX Toolkit 3 を使う方法もある。しかし、Mac の基本的なコマンドである awk を使った方が、バージョンアップなどの際に問題が生じることが少なく、安全そうな気がする。


広告

コメント欄

一言コメントをどうぞ! (基本500字まで - 100字のページもあるかも)



このコメント欄は各ページにあるので、いつ管理人がコメントを見ることになるのか分かりません。内容について質問がある場合は、下のリンク先のフォームから質問頂ければ、早めに返信するようにします。


References

  1. なるべく書かないawkの使い方. Link: Last access 2018/02/05.
  2. AWK リファレンス. Link: Last access 2018/02/05.
  3. Last access 2018/02/05.