遅いですが、あけおめことより。
すごく今さらなんですが、awkの使い方を知りました。
perlの onelinerに -aオプションをつけりゃいいじゃんとしか
思っていなかったんですが、サクっと手短に済ませたいときは
awkでいいかなって思った。
今まで $1, $2を表示するだけのツールかと思っていたんですが、
マッチする行の指定ができるんですね。全部の行のいずれかの
フィールドを表示するという使い方が圧倒的に多いから、
特定の行のみを対象ということがあまりないんでしょう。
マッチさせる方法は簡単で、アクションの前に正規表現を書くだけ。
'||', '&&'で複雑なマッチ条件も書けます。否定のときは '!'をつけます。
/etc/passwdからシェルが '/bin/sh'じゃない、ユーザ名を抜き出すと
いうのを以下に示します。
% awk -F : '!/bin\/sh/ {print $1}' /etc/passwd root sync syslog klog landscape sshd messagebus syohei gitlog gitdaemon mysql
Perlの onelineよりかは若干短くなると思います。
マッチした部分を抜き出すって場合は Perlを使った方がすっきりと
書けそうですけど、単純にフィールドを抜き出すってだけなら
awkの方が短く書けそうですね。