たのしい工学

プログラミングを学んで、モノをつくりたいひと、効率的に仕事をしたい人のための硬派なブログになりました

awkの使い方

   

awkはいうなればフィルタリング言語です。変数、配列宣言もする必要がありません。かんたんに言ってしまえば、標準出力をフィルタできるし、クエリもできる言語です。DBでやりたいようなことを標準出力上でできてしまいます。
構造的なテキストデータがあった場合、それをDBのように集計したいときには、awkが威力を発揮するでしょう。私の場合だと、たとえばログファイルの加工をするときなどに重宝します。

awkで連想配列を利用し、出力した結果はばらばらになります。これはハッシュテーブルとlinked-listというデータ構造を用いているからです。順番通りに並べるには
sort -n -k 2,2 (昇順)
sort -r -n -k 2,2 (降順)
などの、順序を並び替えるコマンドを利用する必要があります。

  • 書き方

パターン{
アクション
}

のように記述します

ひとつのファイルの中にパターン{アクション}はいくつ存在してもよいです

  • パターンには2種類(BEGIN, END)
  • BEGIN:最初に一度だけ実行される
    BEGIN{

    }
    END:最後に一度だけ実行される
    END{

    }

    • 正規表現も利用可能
      例. 3つめのフィールドの値がtからはじまる場合にそのレコードを表示
    
    $3 ~/^t.*/ {
        print $0
    }
    
    

    {print}で{print $0}と同意。つまり、そのレコードデータのフィールド全てを表示します

    • awkの関数内の変数はグローバル変数です

    • FS:Field Separator
      区切り指定

    • RS:Record Separator
      改行指定
    • OFS:Output Field Separator
      出力時区切り指定
    • ORS:Output Record Separator
      出力時改行指定

    参考

    awkのつかいかた
    https://www.atmarkit.co.jp/ait/articles/1706/16/news019.html

    awk ファイルの渡し方
    http://itdoc.hitachi.co.jp/manuals/3020/30203S3530/JPAS0241.HTM

    https://qiita.com/d-dai/items/b261fc8483d0cdeccb58

     - プログラミング系 ,