Awk 組み込み変数の使用方法を学ぶ - パート 10
シリーズのこのパートでは、Awk 機能のセクションを明らかにしながら、Awk の組み込み変数の概念について説明します。 Awk で使用できる変数には次の 2 種類があります。第 8 回で説明したユーザー定義変数と組み込み変数。
組み込み変数には、Awk ですでに定義された値がありますが、これらの値を慎重に変更することもできます。組み込み変数には次のものが含まれます。
FILENAME
: 現在の入力ファイル名 (変数名は変更しないでください)FR
: 現在の入力行の番号 (つまり、入力行 1、2、3 など。変数名は変更しないでください)NF
: 現在の入力行のフィールド数 (変数名は変更しないでください)OFS
: 出力フィールド区切り文字FS
: 入力フィールド区切り文字ORS
: 出力レコード区切り文字RS
: 入力レコード区切り文字
上記の Awk 組み込み変数のいくつかの使用法を説明していきます。
現在の入力ファイルのファイル名を読み取るには、次のように FILENAME
組み込み変数を使用します。
awk ' { print FILENAME } ' ~/domains.txt
ファイル名が入力行ごとに出力されることがわかります。これは、FILENAME
組み込み変数を使用するときの Awk のデフォルトの動作です。
NR
を使用して入力ファイル内の行 (レコード) 数をカウントすると、以下の例で示すように、空の行もカウントされることに注意してください。
cat コマンドを使用してファイル domains.txt を表示すると、テキストが含まれる 14 行と空の 2 行が含まれています。
cat ~/domains.txt
awk ' END { print "Number of records in file is: ", NR } ' ~/domains.txt
レコードまたは行内のフィールドの数をカウントするには、次のように NR 組み込み変数を使用します。
cat ~/names.txt
awk '{ print "Record:",NR,"has",NF,"fields" ; }' ~/names.txt
次に、FS
組み込み変数を使用して入力フィールド区切り文字を指定することもできます。これは、Awk が入力行をフィールドに分割する方法を定義します。
FS
のデフォルト値はスペースとタブですが、FS
の値を任意の文字に変更できます。は、それに応じて入力行を分割するように Awk に指示します。
これを行うには 2 つの方法があります。
- 1 つの方法は、FS 組み込み変数を使用することです。
- 2 つ目は、-F Awk オプションを呼び出すことです。
Linux システム上のファイル /etc/passwd について考えてみましょう。このファイル内のフィールドは :
文字を使用して分割されているため、次の場合に新しい入力フィールド区切り文字として指定できます。次の例のように、特定のフィールドをフィルターで除外したいとします。
次のように -F
オプションを使用できます。
awk -F':' '{ print $1, $4 ;}' /etc/passwd
オプションで、以下のように FS
組み込み変数を利用することもできます。
awk ' BEGIN { FS=“:” ; } { print $1, $4 ; } ' /etc/passwd
出力フィールド区切り文字を指定するには、OFS
組み込み変数を使用します。これは、以下の例のように使用する文字を使用して出力フィールドを区切る方法を定義します。
awk -F':' ' BEGIN { OFS="==>" ;} { print $1, $4 ;}' /etc/passwd
このパート 10 では、事前定義された値が付属する Awk 組み込み変数を使用するというアイデアを検討しました。ただし、これらの値を変更することもできます。ただし、自分が何をしているのかを十分に理解していない限り、変更することはお勧めできません。
この後、Awk コマンド操作でシェル変数を使用する方法について説明します。したがって、Tecmint への接続を維持します。