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 ロケール