Awk-built-in-variables
AWK-組み込み変数
AWKはいくつかの組み込み変数を提供します。 AWKスクリプトの作成中に重要な役割を果たします。 この章では、組み込み変数の使用方法を示します。
標準AWK変数
標準のAWK変数については、以下で説明します。
ARGC
コマンドラインで提供される引数の数を意味します。
例
[jerry]$ awk 'BEGIN {print "Arguments =", ARGC}' One Two Three Four
このコードを実行すると、次の結果が得られます-
出力
Arguments = 5
しかし、4つの引数のみを渡したときにAWKが5と表示するのはなぜですか? 次の例を確認して、疑問を解決してください。
ARGV
コマンドライン引数を格納する配列です。 配列の有効なインデックスの範囲は0〜ARGC-1です。
例
[jerry]$ awk 'BEGIN {
for (i = 0; i < ARGC - 1; ++i) {
printf "ARGV[%d] = %s\n", i, ARGV[i]
}
}' one two three four
このコードを実行すると、次の結果が得られます-
出力
ARGV[0] = awk
ARGV[1] = one
ARGV[2] = two
ARGV[3] = three
CONVFMT
数値の変換形式を表します。 デフォルト値は*%。6g *です。
例
[jerry]$ awk 'BEGIN { print "Conversion Format =", CONVFMT }'
このコードを実行すると、次の結果が得られます-
出力
Conversion Format = %.6g
エンビロン
環境変数の連想配列です。
例
[jerry]$ awk 'BEGIN { print ENVIRON["USER"] }'
このコードを実行すると、次の結果が得られます-
出力
jerry
他の環境変数の名前を見つけるには、 env コマンドを使用します。
ファイル名
現在のファイル名を表します。
例
[jerry]$ awk 'END {print FILENAME}' marks.txt
このコードを実行すると、次の結果が得られます-
- 出力 *
marks.txt
FILENAMEはBEGINブロックでは定義されていないことに注意してください。
FS
(入力)フィールドセパレーターを表し、デフォルト値はスペースです。* -F *コマンドラインオプションを使用してこれを変更することもできます。
例
[jerry]$ awk 'BEGIN {print "FS = " FS}' | cat -vte
このコードを実行すると、次の結果が得られます-
出力
FS = $
NF
現在のレコードのフィールドの数を表します。 たとえば、次の例では、3つ以上のフィールドを含む行のみを印刷します。
例
[jerry]$ echo -e "One Two\nOne Two Three\nOne Two Three Four" | awk 'NF > 2'
このコードを実行すると、次の結果が得られます-
出力
One Two Three
One Two Three Four
NR
現在のレコードの番号を表します。 たとえば、現在のレコード番号が3未満の場合、次の例はレコードを印刷します。
例
[jerry]$ echo -e "One Two\nOne Two Three\nOne Two Three Four" | awk 'NR < 3'
このコードを実行すると、次の結果が得られます-
出力
One Two
One Two Three
FNR
NRに似ていますが、現在のファイルに対して相対的です。 AWKが複数のファイルで動作している場合に便利です。 FNRの値は新しいファイルでリセットされます。
OFMT
出力形式番号を表し、デフォルト値は*%。6g *です。
例
[jerry]$ awk 'BEGIN {print "OFMT = " OFMT}'
このコードを実行すると、次の結果が得られます-
出力
OFMT = %.6g
OFS
出力フィールドの区切り文字を表し、デフォルト値はスペースです。
例
[jerry]$ awk 'BEGIN {print "OFS = " OFS}' | cat -vte
このコードを実行すると、次の結果が得られます-
出力
OFS = $
ORS
出力レコードの区切りを表し、デフォルト値は改行です。
例
[jerry]$ awk 'BEGIN {print "ORS = " ORS}' | cat -vte
上記のコードを実行すると、次の結果が得られます-
出力
ORS = $
$
RLENGTH
*match* 関数で一致した文字列の長さを表します。 AWKの一致関数は、input-stringで特定の文字列を検索します。
例
[jerry]$ awk 'BEGIN { if (match("One Two Three", "re")) { print RLENGTH } }'
このコードを実行すると、次の結果が得られます-
出力
2
RS
(入力)レコード区切り文字を表し、デフォルト値は改行です。
例
[jerry]$ awk 'BEGIN {print "RS = " RS}' | cat -vte
このコードを実行すると、次の結果が得られます-
出力
RS = $
$
RSTART
これは、 match 関数で一致した文字列の最初の位置を表します。
例
[jerry]$ awk 'BEGIN { if (match("One Two Three", "Thre")) { print RSTART } }'
このコードを実行すると、次の結果が得られます-
出力
9
サブセップ
配列添え字の区切り文字を表し、デフォルト値は \ 034 です。
例
[jerry]$ awk 'BEGIN { print "SUBSEP = " SUBSEP }' | cat -vte
このコードを実行すると、次の結果が得られます-
出力
SUBSEP = ^\$
$0
入力レコード全体を表します。
例
[jerry]$ awk '{print $0}' marks.txt
このコードを実行すると、次の結果が得られます-
出力
1) Amit Physics 80
2) Rahul Maths 90
3) Shyam Biology 87
4) Kedar English 85
5) Hari History 89
$n
フィールドがFSで区切られている現在のレコードのn ^ th ^フィールドを表します。
例
[jerry]$ awk '{print $3 "\t" $4}' marks.txt
このコードを実行すると、次の結果が得られます-
出力
Physics 80
Maths 90
Biology 87
English 85
History 89
GNU AWK固有の変数
GNU AWK固有の変数は次のとおりです-
アージンド
これは、処理中の現在のファイルのARGVのインデックスを表します。
例
[jerry]$ awk '{
print "ARGIND = ", ARGIND; print "Filename = ", ARGV[ARGIND]
}' junk1 junk2 junk3
このコードを実行すると、次の結果が得られます-
- 出力 *
ARGIND = 1
Filename = junk1
ARGIND = 2
Filename = junk2
ARGIND = 3
Filename = junk3
BINMODE
非POSIXシステム上のすべてのファイルI/Oにバイナリモードを指定するために使用されます。 1、2、または3の数値は、それぞれ入力ファイル、出力ファイル、またはすべてのファイルがバイナリI/Oを使用することを指定します。* r または *w の文字列値は、それぞれ入力ファイルまたは出力ファイルがバイナリI/Oを使用することを指定します。 rw または wr の文字列値は、すべてのファイルがバイナリI/Oを使用することを指定します。
ERRNO
文字列は、 getline のリダイレクトが失敗した場合、または close 呼び出しが失敗した場合のエラーを示します。
例
[jerry]$ awk 'BEGIN { ret = getline < "junk.txt"; if (ret == -1) print "Error:", ERRNO }'
このコードを実行すると、次の結果が得られます-
出力
Error: No such file or directory
FIELDWIDTHS
フィールド幅変数のスペース区切りリストが設定され、GAWKはFS変数の値をフィールド区切り文字として使用する代わりに、入力を固定幅のフィールドに解析します。
無視
この変数が設定されると、GAWKは大文字と小文字を区別しなくなります。 次の例はこれを示しています-
例
[jerry]$ awk 'BEGIN{IGNORECASE = 1}/amit/' marks.txt
このコードを実行すると、次の結果が得られます-
出力
1) Amit Physics 80
LINT
GAWKプログラムからの*-lint オプションの動的制御を提供します。 この変数が設定されると、GAWKはlint警告を出力します。 文字列値fatalを割り当てると、lint警告は-lint = fatal *とまったく同じように致命的なエラーになります。
例
[jerry]$ awk 'BEGIN {LINT = 1; a}'
このコードを実行すると、次の結果が得られます-
出力
awk: cmd. line:1: warning: reference to uninitialized variable `a'
awk: cmd. line:1: warning: statement has no effect
PROCINFO
これは、実および有効なUID番号、プロセスID番号など、プロセスに関する情報を含む連想配列です。
例
[jerry]$ awk 'BEGIN { print PROCINFO["pid"] }'
このコードを実行すると、次の結果が得られます-
出力
4316
テキストドメイン
AWKプログラムのテキストドメインを表します。 プログラムの文字列のローカライズされた翻訳を見つけるために使用されます。
例
[jerry]$ awk 'BEGIN { print TEXTDOMAIN }'
このコードを実行すると、次の結果が得られます-
出力
messages
上記の出力は、 en_IN ロケールによる英語のテキストを示しています