ウェブサイト検索

Awk 組み込み変数の使用方法を学ぶ - パート 10


シリーズのこのパートでは、Awk 機能のセクションを明らかにしながら、Awk の組み込み変数の概念について説明します。 Awk で使用できる変数には次の 2 種類があります。第 8 回で説明したユーザー定義変数と組み込み変数。

組み込み変数には、Awk ですでに定義された値がありますが、これらの値を慎重に変更することもできます。組み込み変数には次のものが含まれます。

  1. FILENAME : 現在の入力ファイル名 (変数名は変更しないでください)
  2. FR : 現在の入力行の番号 (つまり、入力行 1、2、3 など。変数名は変更しないでください)
  3. NF : 現在の入力行のフィールド数 (変数名は変更しないでください)
  4. OFS : 出力フィールド区切り文字
  5. FS : 入力フィールド区切り文字
  6. ORS : 出力レコード区切り文字
  7. 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. 1 つの方法は、FS 組み込み変数を使用することです。
  2. 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 への接続を維持します。