わずか一行のプログラムで、 AWKでは現実的で便利な処理ができます。そん なプログラムを一行野郎とか one linersと呼びます。一行 野郎は、スクリプトファイルを作らずに、次の例のようにコマンドラインにプ ログラムを直接書くのが粋です。ここに上げる例は、みなgawkのマニュアルに 載っていたものです。例中のdatafileは処理したいファイル名に置き換えてく ださい。
% gawk '{ if (length($0) > max) max = length($0) } END { print max }' datafile
この一行野郎は、datafileの行の最大の長さを出力します。
% gawk '{if (length($0)>m) m=length($0)} END{print m}' datafile
一行野郎では変数名はうんと短かくて良いと思います。これは一つ目の一行野
郎の変数maxをmに変えて、分りにくくならない程度に空白も取り除いたもので
す。
% gawk 'length($0) > 80' datafile'
80文字を超える行だけを出力します。
% gawk 'NF > 0' datafile
少なくとも一つのフィールドがある行だけを出力します。つまり、空白文字だ
けの行を削除します。
% gawk 'BEGIN { for (i = 1; i <= 7; i++) print int(101 * rand()) }'
0から100までの範囲で、ランダムな数を7個、出力します。
% gawk 'END { print NR }' datafile
レコードの値、つまり入力の行数を出力します。
% gawk 'NR % 2 == 0' datafile
入力の偶数行だけを出力します。これを使うと、 Cなどで計算した結果をファ
イルに保存しておけば、刻み幅で計算結果を間引くことなどが簡単にできます。
% ls -lg FILES | awk '{ x += $5 } ; END { print "total bytes: " x }'
複数のファイルのサイズの総計を求めます。FILESにはファイル名を列挙した
り、シェルのワイルドカードを使って対象ファイルを指定します。
% ls -lg FILES | awk '{ x += $5 } END { print "total K-bytes: " (x + 1023)/1024 }'
キロバイト単位にしたいのなら、最後で少し計算を加えれば良いですね。
OGURISU Osamu