例えば、大学のコンピュータにあるファイルを自宅に持って帰りたい。でも
ちょっと大きいのが幾つかあるからフロッピー1枚に収まるだろうか?なんてこ
とはありがちです
。とりあえず、
ls -l でファイルの大きさをチェックしてみましょう。
% ls -l
合計 101572
-r--r--r-- 1 ogurisu ogurisu 280396 5月 20日 1999年 auctex-9.9p.tar.gz
-r--r--r-- 1 ogurisu ogurisu 169498 5月 26日 1999年 cmail-2.59.13.tar.gz
-rw-r--r-- 1 ogurisu ogurisu 1319271 10月 24日 08:32 gnuplot_3.7.tar.gz
-rw-r--r-- 1 ogurisu ogurisu 822766 9月 27日 18:59 ruby-1.6.1.tar.gz
-r--r--r-- 1 ogurisu ogurisu 51458 7月 15日 1998年 sh-text.tar.gz
-r--r--r-- 1 ogurisu ogurisu 257496 5月 20日 1999年 yatex1.66.tar.gz
%
それぞれのファイルの大きさを合計して1.4メガバイト(約1,400,000バイト)を 超えなければフロッピー1枚に収まるでしょう。そこで、電卓を取出して -- 電卓プログラムを起動して -- ファイルサイズを合計しましょ う。
これって、なんかだか変だと思いませんか? ファイルサイズのデータはコン ピュータの中にあるのに、それをわざわざ人間の手で電卓(プログラム)に入力 するんですか?
こんなとき AWKを知っていれば、次のようにコマンドライン一発で計算でき ます。2900885バイトもあるので、全然フロッピーに収まりませんね。
% ls -l | gawk '{a+=$5;} END {print a;}'
2900885
%
パイプ | の後ろにあるgawkが AWKのコマンドです
。そのあとに '{a+=$5;} END
{print a;}' と、なんだか呪文のようなことを書いていますが、これが
AWKのプログラムです。
このプログラムは次のようにファイルに保存して実行することもできます。ファ イル名はなんでも良いので、例えばsum.awkとしましょう。
#!/usr/local/bin/gawk -f
# sum.awk:
{
a += $5;
}
END {
print a;
}
そしてさきほどの gawk 'a+=$5; END print a;' を gawk -f sum.awk
に置き換えて実行します
。
% ls -l | gawk -f sum.awk
2900885
%
AWKでは、 Cや Fortranと違いコンパイルも不要です。ぱっと書いて、
ぱっと実行する。もし間違っていても、ちゃっちゃと書きなおして、すぐに再
実行できます。lsのような他のプログラムから出力される大量のデータを要約
するなどの作業に適しています。単純だけど人間が手でやるには面倒くさい作
業を肩代りさせる使い棄てのプログラムに便利です
。
また、sin(x)の値を区間[0,π] で100等分して出力したいなんて簡単な計算のときは、わ ざわざ Cを使わなくても、次のようなスクリプトsin.awkを作っ て実行すれば十分です。
#!/usr/local/bin/gawk -f
# sin.awk:
BEGIN {
for (i = 0; i <= 100; i++)
printf("%1.6f\n", sin(i*3.1415/100));
}
% gawk -f ./sin.awk
書式が Cに似ていると思いませんか? Cを少し知っていれば新しく覚える
ことは極わずかです
。
なお、 AWKという名前は作者の3人の頭文字を並べたもので、Kは「プログラ ミング言語 C」の著者 Kerninghanです。Aは名著「データ構造とア ルゴリズム」の著者の一人 Aho、Wは Weinbergerです。情報 科学の三巨人の共作ですね。
OGURISU Osamu