POSIX1日1コマンド[part6]: awk
詳細はこちらの記事へ。1日1POSIXコマンドを実行してみようというやつです。
awk
とりあえず使ってみる
$ ls -la total 0 drwxrwxr-x. 2 vagrant vagrant 45 Feb 26 01:55 . drwxrwxr-x. 5 vagrant vagrant 51 Feb 26 01:53 .. -rw-rw-r--. 1 vagrant vagrant 0 Feb 26 01:54 a.txt -rw-rw-r--. 1 vagrant vagrant 0 Feb 26 01:54 b.txt -rw-rw-r--. 1 vagrant vagrant 0 Feb 26 01:54 c.txt $ls -la | awk '{ print "owner is " $3 ", filename is "$9 }' owner is , filename is owner is vagrant, filename is . owner is vagrant, filename is .. owner is vagrant, filename is a.txt owner is vagrant, filename is b.txt owner is vagrant, filename is c.txt
awk を知る
ざっくり使い方
awk [-F sepstring] [-v assignment]... program [argument...] awk [-F sepstring] -f progfile [-f progfile]... [-v assignment]... [argument...]
ざっくりDESCRIPTION
パターンをスキャンし処理するプログラム言語の一つ。テキストデータの処理に特化している。一連のパターンと対応するアクション。パターンと一致する入力が読み取られると、そのパターンに関連付けられたアクションが実行される。
入力は一連のレコードとして認識される。デフォルトでは、レコードは行で、改行で終了します。ですがこれは、RS
という組み込み変数を使うと変更することができます。
入力の各レコードは、順番にプログラムの各行と照合される。一致した各行は、関連するアクションを実行しなければならない。
awkは各入力のレコードを一連のフィールドとして解釈する。デフォルトでのフィールどの文字列は、「空白」、「改行」以外の文字です。このデフォルトの「空白」、「改行」という区切り文字は、FS
という組み込み変数、もしくは -F
オプションで変更できる。
レコードのフィールドは、最初の文字から $1
$2
... で使えます。
また、$0
はレコード全体を示します。他のフィールドを設定すると $0
の再評価が行われる。$ 0に代入すると、他のすべてのフィールドとNF組み込み変数の値がリセットされる。
ざっくりOPTION
- -F
- フィールド区切り文字を定義します。ただし、-F <区切り文字>と-v FS = <区切り文字>の両方が使用されている場合、-F <区切り文字>からのFS割り当てがコマンド行順で処理されるか、最後の-v FS = <区切り文字>の後で処理されるかは不特定です。
- -f progfile
- -v assignment
ざっくりOPERANDS
awk programfile
ざっくりまとめ
awkは行区切りで表示されるデータの一部の値を取得したいときや使いたいときに非常に便利なコマンドですね。-F
だけでも覚えておけば、日々の業務を楽にできる可能性があります。
$cat sample.csv 1,dog,200 2,cat,300 3,bird,50 4,cow,400 5,rabbit,200 $cat sample.csv | awk -F ',' '{ print $2 }' dog cat bird cow rabbit
2番目のフィールの動物の名前を取得した。
上記例の通り、CSVなど特定の区切り文字が利用されているデータにはもってこいじゃないでしょうか。
そしてawkは奥が深いのでさらに深く知りたい人は、
sed & awkプログラミング 改訂版 (A nutshell handbook)
- 作者: Dale Dougherty,Arnold Robbins,福崎俊博
- 出版社/メーカー: オライリー・ジャパン
- 発売日: 1997/10/01
- メディア: 大型本
- 購入: 2人 クリック: 48回
- この商品を含むブログ (34件) を見る
これを買いましょう。