awk よく使うシステム変数と使い方

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

awkのスクリプトでは、参照や設定が可能な「特殊な変数(システム変数)」を使うことができます。

スポンサーリンク



よく使うシステム変数

awkのスクリプトでシステム変数を使うと、より簡潔にスクリプトを表現できます。

システム変数 働き
ARGC コマンドライン引数の数
ARGV コマンドライン引数の配列
FILENAME ファイル名
FS フィールドの区切り文字(入力:デフォルト 空白)
OFS フィールドの区切り文字(出力:デフォルト 空白)
RS レコードの区切り文字(入力:デフォルト 改行)
ORS レコードの区切り文字(出力:デフォルト 改行)
NF カレントレコードのフィールド数
NR レコード番号

システム変数の使い方

awkスクリプトでシステム変数を使ってみましょう。簡単な例を紹介します。

ARGC・ARGV

awkのスクリプト実行時に渡した引数の情報を表示します。

awk_sysval1.awk

END {
    # 引数の数を表示
    print "ARGVs   : "ARGC
    # 引数の番号0〜2を順番に処理
    for (x in ARGV) {
        # 引数内容を表示
    	print "ARGV["x"] : "ARGV[x]
    }
}

使い方

$ awk -f awk_sysval1.awk val=aaa myawk.txt
ARGVs   : 3
ARGV[0] : awk
ARGV[1] : val=aaa
ARGV[2] : myawk.txt

FILENAME

awkのスクリプトに渡したファイル名を表示します(処理中のファイル名)。

awk_sysval2.awk

{
    print FILENAME
}

使い方

$ echo aaa > data1.txt
$ echo bbb > data2.txt
$ awk -f awk_sysval2.awk data1.txt data2.txt
data1.txt
data2.txt

FS・OFS

フィールドの区切り文字を変更します。

【関連記事】 awk 区切り文字とフィールド

NF・NR

フィールド番号やレコード番号で処理を制御します。

awk_sysval3.awk

NR(レコード番号)に条件を与えることで、1行目・2行目の表示では1番目のフィールド・最後のフィールドを出力。3行目・4行目の表示では最後のフィールド・1番目のフィールド(順番入れ替え)を表示します。

NR < 3 {
    print $1, $NF
}
NR > 4 {
    print $NF, $1
}

使い方

$ cat awk_sysval_test.txt
1:2:3
4:5:6
7:8:9
A:B:C
D:E:F
G:H:I
$ awk -F: -f awk_sysval3.awk awk_sysval_test.txt 
1 3
4 6
F D
I G
スポンサーリンク



2 thoughts to “awk よく使うシステム変数と使い方”

コメントは受け付けていません。