Awk-basic-examples

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

AWK-基本的な例

この章では、いくつかの便利なAWKコマンドとその適切な例を説明します。 テキストファイル marks.txt が次の内容で処理されることを考慮してください-

1) Amit     Physics   80
2) Rahul    Maths     90
3) Shyam    Biology   87
4) Kedar    English   85
5) Hari     History   89

列またはフィールドの印刷

入力フィールドの特定の列のみを印刷するようにAWKに指示できます。 次の例はこれを示しています-

[jerry]$ awk '{print $3 "\t" $4}' marks.txt

このコードを実行すると、次の結果が得られます-

出力

Physics   80
Maths     90
Biology   87
English   85
History   89

ファイル marks.txt の3番目の列にはサブジェクト名が含まれ、4番目の列には特定のサブジェクトで取得されたマークが含まれます。 AWK印刷コマンドを使用して、これら2つの列を印刷します。 上記の例では、 $ 3と$ 4 はそれぞれ入力レコードの3番目と4番目のフィールドを表します。

すべての行を印刷する

デフォルトでは、AWKはパターンに一致するすべての行を印刷します。

[jerry]$ awk '/a/{print $0}' marks.txt

このコードを実行すると、次の結果が得られます-

出力

2) Rahul    Maths     90
3) Shyam    Biology   87
4) Kedar    English   85
5) Hari     History   89

上記の例では、フォームパターン a を検索しています。 パターンマッチが成功すると、ボディブロックからコマンドを実行します。 本体ブロックがない場合-レコードを印刷するデフォルトのアクションが実行されます。 したがって、次のコマンドは同じ結果を生成します-

[jerry]$ awk '/a/' marks.txt

パターンによる列の印刷

パターンマッチが成功すると、AWKはデフォルトでレコード全体を印刷します。 ただし、特定のフィールドのみを印刷するようにAWKに指示できます。 たとえば、次の例では、パターンマッチが成功したときに3番目と4番目のフィールドを出力します。

[jerry]$ awk '/a/{print $3 "\t" $4}' marks.txt

このコードを実行すると、次の結果が得られます-

出力

Maths    90
Biology  87
English  85
History  89

任意の順序で列を印刷する

列は任意の順序で印刷できます。 たとえば、次の例では、4番目の列に続いて3番目の列が出力されます。

[jerry]$ awk '/a/{print $4 "\t" $3}' marks.txt

上記のコードを実行すると、次の結果が得られます-

出力

90   Maths
87   Biology
85   English
89   History

一致したパターンのカウントと印刷

パターンマッチが成功した行の数を数えて印刷できる例を見てみましょう。

[jerry]$ awk '/a/{++cnt} END {print "Count = ", cnt}' marks.txt

このコードを実行すると、次の結果が得られます-

出力

Count = 4

この例では、パターンマッチが成功したときにcounterの値をインクリメントし、この値をENDブロックに出力します。 他のプログラミング言語とは異なり、変数を使用する前に宣言する必要はありません。

18文字以上の行を印刷する

18文字を超える行のみを印刷してみましょう。

[jerry]$ awk 'length($0) > 18' marks.txt

このコードを実行すると、次の結果が得られます-

出力

3) Shyam   Biology   87
4) Kedar   English   85

AWKは、文字列の長さを返す組み込みの length 関数を提供します。 $ 0 変数は行全体を格納し、ボディブロックがない場合、デフォルトアクション、つまり印刷アクションが実行されます。 したがって、行に18文字を超える文字が含まれている場合、比較結果はtrueになり、行が印刷されます。