コマンド
awk
テキスト整形ツール(パイプ)
一昔前は、perl のようにテキスト処理ツールとして広く使われてきた。
例えば
% ls -l | awk '{print $5,$9}'
とすることで、ファイルサイズとファイル名の一覧が得られる。この例は、入力を空白で区切り、5番目と9番目の列を出力している。空白以外を区切りとしたければ、-F オプションを使えばよい。例えば `.' を区切り (フィールドセパレータという) としたければ
% ls -l | awk -F . '{print $1}'
とする。
{} の前に任意の正規表現を書くと、そこにマッチした行に対して {} 内が実行される。
% ls -l | awk '/abc/ {print $5,$9}'
は、abc を含むファイル名と、そのファイルサイズを表示する。
特殊なパターンとして BEGIN と END がある。BEGIN は最初に実行され、END は最後に実行される。
% ls -l | awk 'BEGIN { print "START!"} {total+=$5; print $9} END {print "size total="total} '
これは、BEGIN {…} で最初に START! と表示し、各行ごとにファイルサイズを変数 total に加算し、END {…} を使って最後にファイルサイズの合計を表示するものである。
スクリプトとして動作させるには、-f オプションを付けて
#!/usr/bin/awk -f
BEGIN { print "START!"}
{total+=$5; print $9}
END {print "size total="total}
などと書く。
awk は一冊の本が書けるほど高機能なので、ここではこれ以上は解説しない。ただし、awk はプログラミング言語というより、行単位の変換ツールと言った方が適切だと思う。大規模なプログラムを作成するのには、絶対に向かない。今から awk を覚えるよりは、perl か ruby の勉強をした方がよいだろう。
読み方
awk
(UNIXコマンド) (プログラミング言語) [おーく]
3人の作者の名前、Aho, Weinberger, Kernighan の頭文字より。 [えー・だぶりゅー・けー] と分けて発音してはいけない。一般的ではないが:-) [えいうく] という読みもある。