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
フィールドの区切り文字を変更します。
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
実験データの解析や論文用グラフ作成のヒントになりそうな、プログラミング・統計処理の参考になる書籍をまとめて紹介しています。是非、参考にしてみて下さいね。