AWK NF とは何ですか?

Awk Nf Toha Hedesuka



AWK スクリプト言語には、事前に定義された目的に役立つ一連の組み込み特殊変数もあります。そのような組み込み変数の 1 つは、独自の定義済み機能を持つ「NF」です。この記事では、この組み込みの AWK 変数の目的を、Ubuntu 20.04 での関連例をいくつか示して説明します。

Ubuntu 20.04 の AWK NF:

「NF」AWK 変数は、提供されたファイルのすべての行のフィールド数を出力するために使用されます。この組み込み変数は、ファイルのすべての行を 1 つずつ繰り返し処理し、各行のフィールド数を別々に出力します。この機能をうまく理解するには、以下で説明する例を読む必要があります。

Ubuntu 20.04 での AWK NF の使用方法を示す例:

次の 4 つの例は、AWK NF の使用法を非常に理解しやすい方法で学習できるように設計されています。これらの例はすべて、Ubuntu 20.04 オペレーティング システムを使用して実装されています。







例 # 1: テキスト ファイルの各行からフィールド数を出力します。

この例では、Ubuntu 20.04 のテキスト ファイルの各行、行、またはレコードのフィールドまたは列の数を出力したいと考えました。その方法を示すために、下の画像に示すテキスト ファイルを作成しました。このテキスト ファイルには、パキスタンの 5 つの異なる都市の 1 キログラムあたりのリンゴの割合が含まれています。





このサンプル テキスト ファイルを作成したら、次のコマンドを実行して、このテキスト ファイルの各行のフィールド数を端末に出力しました。





$ おかしい ' { プリントNF } ' AppleRates.txt

このコマンドには、AWK コマンドを実行していることを示す「awk」キーワードがあり、その後に「print NF」ステートメントが続きます。このステートメントは、ターゲット テキスト ファイルの各行を単純に繰り返し処理し、それぞれのフィールド数を個別に出力します。テキストファイルの行。最後に、そのテキスト ファイル (フィールドがカウントされるファイル) の名前がわかりました。この場合は、「AppleRatest.txt」です。



テキスト ファイルの 5 行すべてでまったく同じ数のフィールド、つまり 2 があるため、このコマンドを実行すると、テキスト ファイルのすべての行のフィールド数として同じ数が出力されます。これは、下の画像から確認できます。

例 # 2: テキスト ファイルの各行からフィールド数を表示可能な方法で出力します。

上記の例で表示された出力は、テキスト ファイルの各行の行番号とフィールド数を表示することによってもうまく表現できます。さらに、選択した特殊文字を使用して、フィールド数から行番号を区切ることもできます。これを示すために、最初の例で使用したのと同じテキスト ファイルを使用します。ただし、この場合に実行するコマンドは少し異なり、次のようになります。

$ おかしい ' { NR、「---」、NFを印刷 } ' AppleRates.txt

このコマンドでは、組み込みの AWK 変数「NR」を導入しました。これは、ターゲット テキスト ファイルのすべての行の行番号を単純に出力します。さらに、3 つのダッシュ「—」を特殊文字として使用して、提供されたテキスト ファイルのフィールド数から行番号を区切ります。

以下の画像は、同じテキスト ファイルのわずかに変更された出力を示しています。

例 # 3: テキスト ファイルの各行から最初と最後のフィールドを出力します。

提供されたテキスト ファイルのすべての行のフィールド数をカウントするだけでなく、AWK の「NF」特殊変数を使用して、提供されたテキスト ファイルから最後のフィールドの実際の値を抽出することもできます。ここでも、最初の 2 つの例で使用したものとまったく同じテキスト ファイルを使用しました。ただし、この例では、テキスト ファイルの最初と最後のフィールドの実際の値を出力したいと考えています。そのために、次のコマンドを実行しました。

$ おかしい ' { 印刷する $1 $NF } ' AppleRates.txt

このコマンドでは、「awk」キーワードの後に​​「print $1, $NF」ステートメントが続きます。 「$1」特殊変数は、提供されたテキスト ファイルの最初のフィールドまたは最初の列の値を出力するために使用されていますが、「$NF」AWK 変数は、最後のフィールドまたは最後の列の値を出力するために使用されています。ターゲット テキスト ファイルの。ここで、「NF」AWK 変数をそのまま使用すると、各行のフィールド数をカウントするために使用されることに注意する必要があります。ただし、ドル記号「$」と一緒に使用すると、提供されたテキスト ファイルの最後のフィールドから実際の値が抽出されます。コマンドの残りの部分は、最初の 2 つの例で使用したコマンドとほぼ同じです。

以下に示す出力では、提供されたテキスト ファイルの最初と最後のフィールドの実際の値が端末に出力されていることがわかります。この出力は、提供されたテキスト ファイルに 2 つのフィールドしかないという理由だけで、「cat」コマンドの出力とほとんど同じであることがわかります。したがって、ある意味では、上記のコマンドを実行した結果、テキスト ファイル全体の内容が端末に出力されました。

例 # 4: テキスト ファイル内のフィールドが欠落しているレコードを分離する:

場合によっては、テキスト ファイルに特定のフィールドが欠落しているレコードがいくつかあり、それらのレコードをあらゆる面で完全なレコードから分離したい場合があります。これは、「NF」AWK 変数を使用して行うこともできます。そのために、「ExamMarks.txt」という名前のテキスト ファイルを作成しました。このファイルには、3 つの異なる試験での 5 人の異なる学生の試験スコアと名前が含まれています。しかし、3 回目の試験では、何人かの生徒が欠席し、点数が取れませんでした。このテキスト ファイルは次のとおりです。

フィールドが欠落しているレコードと完全なフィールドがあるレコードを区別するために、以下に示すコマンドを実行します。

$ おかしい ' { 印刷NR、「--- > 」、NF } ' ExamMarks.txt

このコマンドは、2 番目の例で使用したコマンドと同じです。ただし、次の図に示すこのコマンドの出力から、1 番目と 4 番目のレコードが完全であるのに対し、2 番目、3 番目、5 番目のレコードには欠落しているフィールドが含まれていることがわかります。

結論:

この記事の目的は、「NF」AWK 特殊変数の使用法を説明することでした。最初に、この変数がどのように機能するかについて簡単に説明し、その後、4 つの異なる例を使用してこの概念を詳しく説明しました。共有されているすべての例をよく理解すると、「NF」AWK 変数を使用してフィールドの総数を数え、提供されたファイルの最後のフィールドの実際の値を出力できるようになります。