Awk-built-in-variables

提供:Dev Guides
移動先:案内検索

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 ロケールによる英語のテキストを示しています