Awk-basic-examples
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になり、行が印刷されます。