Skip to content

awk コマンド#

awkはテキストデータのフィールドを処理するのに非常に便利なツールです。

基本#

以下に、基本的な使い方を示します。

  1. 基本的な構文:
    awk 'pattern { action }' file
    
  2. pattern: 処理を行いたいレコードを指定するための条件式
  3. action: 指定されたレコードに対して行う処理
  4. file: 入力として使用するファイル名

  5. 基本的な例: ファイルの各行を表示:

    awk '{ print }' file
    

  6. フィールドの取り扱い: デフォルトで、awkは空白やタブをフィールドの区切りとして認識します。 1つ目のフィールドを表示:

    awk '{ print $1 }' file
    

  7. パターンを使用: $2 (2つ目のフィールド) が"John"の場合にのみ行を表示:

    awk '$2 == "John" { print }' file
    

  8. 内蔵変数:

  9. NR: 現在のレコード番号
  10. NF: 現在のレコードのフィールド数

最後のフィールドを表示:

awk '{ print $NF }' file

  1. 区切り文字の変更: カンマをフィールドの区切り文字として使用:
    awk -F, '{ print $1 }' file
    

この基本を理解すれば、awkで多くのテキスト処理タスクを行うことができます。練習を重ねることで、さらに複雑な操作も行えるようになるでしょう。

レシピ#

awkは非常に強力で柔軟性のあるテキスト処理ツールです。以下は、awkを使用したいくつかの一般的なレシピを示しています。

  1. 合計と平均を計算: 第一フィールドの合計と平均を計算する。

    awk '{ sum += $1; n++ } END { print "合計: " sum; print "平均: " sum/n }' file
    

  2. 特定の列の値を基に行をフィルタ: 第二フィールドの値が5より大きい行だけを表示。

    awk '$2 > 5' file
    

  3. 特定の文字列を含む行の数をカウント: "example" という文字列を含む行の数をカウント。

    awk '/example/ { count++ } END { print count }' file
    

  4. 各行のフィールド数を表示:

    awk '{ print NF }' file
    

  5. 行をフィールドで逆転:

    awk '{ for (i = NF; i > 0; i--) printf $i " "; print "" }' file
    

  6. ユニークなレコードを表示:

    awk '!seen[$0]++' file
    

  7. 特定の区切り文字で分割し、特定のフィールドを表示: ":" で区切られたテキストから第2フィールドを表示。

    awk -F: '{ print $2 }' file
    

  8. テキストの後ろに行番号を追加:

    awk '{ print $0, NR }' file
    

  9. 特定の列の合計だけを表示: 第三フィールドの合計のみを表示。

    awk '{ sum += $3 } END { print sum }' file
    

これらはawkの基本的な使用方法を示すものであり、実際にはもっと複雑な操作を行うことができます。 具体的なニーズや状況に応じて、これらのレシピを適応または拡張して使用してください。