Awk-basic-examples
AWK-基本的な例
この章では、いくつかの便利なAWKコマンドとその適切な例を説明します。 テキストファイル marks.txt が次の内容で処理されることを考慮してください-
列またはフィールドの印刷
入力フィールドの特定の列のみを印刷するようにAWKに指示できます。 次の例はこれを示しています-
例
このコードを実行すると、次の結果が得られます-
出力
ファイル marks.txt の3番目の列にはサブジェクト名が含まれ、4番目の列には特定のサブジェクトで取得されたマークが含まれます。 AWK印刷コマンドを使用して、これら2つの列を印刷します。 上記の例では、 $ 3と$ 4 はそれぞれ入力レコードの3番目と4番目のフィールドを表します。
すべての行を印刷する
デフォルトでは、AWKはパターンに一致するすべての行を印刷します。
例
このコードを実行すると、次の結果が得られます-
出力
上記の例では、フォームパターン a を検索しています。 パターンマッチが成功すると、ボディブロックからコマンドを実行します。 本体ブロックがない場合-レコードを印刷するデフォルトのアクションが実行されます。 したがって、次のコマンドは同じ結果を生成します-
例
パターンによる列の印刷
パターンマッチが成功すると、AWKはデフォルトでレコード全体を印刷します。 ただし、特定のフィールドのみを印刷するようにAWKに指示できます。 たとえば、次の例では、パターンマッチが成功したときに3番目と4番目のフィールドを出力します。
例
このコードを実行すると、次の結果が得られます-
出力
任意の順序で列を印刷する
列は任意の順序で印刷できます。 たとえば、次の例では、4番目の列に続いて3番目の列が出力されます。
例
上記のコードを実行すると、次の結果が得られます-
出力
一致したパターンのカウントと印刷
パターンマッチが成功した行の数を数えて印刷できる例を見てみましょう。
例
このコードを実行すると、次の結果が得られます-
出力
この例では、パターンマッチが成功したときにcounterの値をインクリメントし、この値をENDブロックに出力します。 他のプログラミング言語とは異なり、変数を使用する前に宣言する必要はありません。
18文字以上の行を印刷する
18文字を超える行のみを印刷してみましょう。
例
このコードを実行すると、次の結果が得られます-
出力
AWKは、文字列の長さを返す組み込みの length 関数を提供します。 $ 0 変数は行全体を格納し、ボディブロックがない場合、デフォルトアクション、つまり印刷アクションが実行されます。 したがって、行に18文字を超える文字が含まれている場合、比較結果はtrueになり、行が印刷されます。