awk 区切り文字とフィールド

バイオインフォ道場、くまぞうです。

awkは、入力の各行を区切り文字でフィールドに分割して、それぞれを個別に取り出すことができます。

スポンサーリンク



awk 区切り文字の変更

入力行をフィールドに分割するのは区切り文字です。デフォルトは、スペースやタブです。変更するときは、-Fオプションに続けて、区切り文字を指定します。システム変数FS(入力)やOFS(出力)を使って指定することもできます。この場合、入力時の区切り文字と、出力時の区切り文字を個別に指定できます。

また、区切り文字を複数指定する場合、FS=”[, :]”という書式で登録します。

# 区切りは:(コロン, -F指定), 出力時の区切りはスペース(デフォルト)
$ echo "1:2:3" | awk -F: '{print $1,$3}'
1 3

# 区切りは:(コロン, FS指定), 出力時の区切りは-(ハイフン, OFS指定)
$ echo "1:2:3" | awk '{print $1,$3}' FS=: OFS=-
1-3

awk 任意のフィールドを取り出す

区切り文字で分割されたフィールドは、個別に取り出すことができます。1番目のレコードは$1、2番目のレコードは$2、・・・と、個別に取り出すことができます。全体は、$0で表現されます。

# 区切りは:(コロン), 出力時の区切りは-(ハイフン)
# 1番目・3番目を出力。
$ echo "1:2:3" | awk '{print $1,$3}' FS=: OFS=-
1-3

# 2番目のみ出力。
$ echo "1:2:3" | awk '{print $2}' FS=: OFS=-
2

# 全体出力(区切り文字も入力のまま)。
$ echo "1:2:3" | awk '{print $0}' FS=: OFS=-
1:2:3

# ファイルに処理を適用
# 区切りは:(コロン), 出力時の区切りは-(ハイフン)
# 1番目・3番目を出力。
$ cat awk2.txt
1:2:3
4:5:6

$ awk '{print $1,$3}' FS=: OFS=- awk2.txt
1-3
4-6

$ cat awk2.txt | awk '{print $1,$3}' FS=: OFS=-
1-3
4-6
スポンサーリンク