UNIX/Linuxの部屋 コマンド:awk


※空白区切りで AND 検索 (例:「ファイル 削除」)

コマンド 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 の勉強をした方がよいだろう。
>> Solaris10オンラインマニュアル(man) Solaris10 awk(1)
>> FreeBSDオンラインマニュアル(man) FreeBSD awk(1)

読み方 awk (UNIXコマンド) (プログラミング言語) [おーく]

3人の作者の名前、Aho, Weinberger, Kernighan の頭文字より。 [えー・だぶりゅー・けー] と分けて発音してはいけない。一般的ではないが:-) [えいうく] という読みもある。


頑張って書いたおすすめコンテンツ!