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