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

関連記事

awk 行の表示 先頭行 最終行 指定行
awkは、テキスト処理に欠かせません。よく使う「行を指定した処理」に使える定型スクリプトをまとめました。簡単に書けるように、省略できる部分は極力省きました。awk と 行awkで行を指定して「何かの処理」を実行するときは、「いま何行目?」を...

awk 置換や部分文字列などの文字列処理 gsub sub match index split 等
awkの文字列関数について、置換や部分文字列処理など、よく使う代表的なものを簡単なサンプルを使って紹介します。awk 置換文字列置換 gsub subgsub・subは、対象となる文字列tについて正規表現rにマッチした部分を置換文字列sで置...

awk 複数行の処理
ファイルには様々な形式があります。1行単位で記述されたCSV(カンマ区切り)ファイルやTSV(タブ区切り)ファイルは、awkやsed、その他のbashコマンドなどを使っても比較的処理がしやすい。しかし、複数行でレコードが構成される場合(1行...

awk split | サンプルでわかる列の分割とセパレータ指定方法
awkのsplit関数は、セパレータを指定して文字列を分割することができます。セパレータには文字や正規表現で指定できて、指定しない場合はフィールドセパレータがデリミタとして使われます。分割後の単語は、配列に格納されて1〜分割数nまでのインデ...

awk while・do 繰り返し処理
awkの繰り返し処理(for・while・do)についてまとめます。今回は、while・doについて。とにかく早く問題解決したい人はこちら>>直接、データ解析相談awk while 繰り返し処理条件を満たせば「ずっと」繰り返しを行います。繰...

404 NOT FOUND | バイオインフォ 道場 [bioinfo-Dojo]
バイオインフォ 道場

404 NOT FOUND | バイオインフォ 道場 [bioinfo-Dojo]
バイオインフォ 道場

404 NOT FOUND | バイオインフォ 道場 [bioinfo-Dojo]
バイオインフォ 道場

awk パターンとアクション
awkは、入力行に対してフィルタリングなどの処理を行う際によく用いられます。入力行に対して「どの行に処理を行うか」を指定するのがパターン、「どんな処理を行うか」を指定するのが「アクション」です。とにかく早く問題解決したい人はこちら>>直接、...

awk 区切り文字とフィールド
awkは、入力の各行を区切り文字でフィールドに分割して、それぞれを個別に取り出すことができます。とにかく早く問題解決したい人はこちら>>直接、データ解析相談awk 区切り文字の変更入力行をフィールドに分割するのは区切り文字です。デフォルトは...

awk コマンドラインでの実行とスクリプトファイルでの実行
awkを実行する場合、コマンドラインで指定する方法と、スクリプトファイルを指定する方法があります。とにかく早く問題解決したい人はこちら>>直接、データ解析相談awk コマンドラインで指定するpatternとactionは、シングルクォートで...

awk 使い方 フィールド取り出し スクリプトの書き方
awkで簡単なフィールドデータの取り出しを行います。awk は入力された行について、空白やタブで区切られたデータをフィールドと解釈します。・…を指定することで、各行のフィールドを取り出すことができます。尚、https://bioinfo-dojo.net/2016/02/18/awk_easy_field_filter/は入力行全体です。se...

正規表現 メタキャラクタ 検索・置換 前編
sed や awk、grep、その他のプログラム処理で文字列を扱うときに、よく用いられる「正規表現」についてまとめます。とにかく早く問題解決したい人はこちら>>直接、データ解析相談正規表現とは正規表現とは、文字列集合を特殊文字(メタキャラク...

正規表現 メタキャラクタ 検索・置換 後編
sed や awk、grep、その他のプログラム処理で文字列を扱うときに、よく用いられる「正規表現」についてまとめます。とにかく早く問題解決したい人はこちら>>直接、データ解析相談正規表現とは正規表現とは、文字列集合を特殊文字(メタキャラク...