2000年5月 7日(日)

Unix ことはじめ…15

 約一ヶ月間更新をサボってしまった .... 時間が割けるようになったわけではないけれど、話を少しだけでも前へ進めてみよう。

 前回作ったファイル suji から最大値を求めてみよう。少しコンピュータ言語をかじったことがある人なら、awk を使ってこんなプログラムを作ってみるのではないだろうか。

    #!/bin/sh .... shell で書かれていることを明示的に示す。
    awk ' .... awk スクリプトの始まり
    { .... 読みこんだ全ての行に対する処理。
        if ($0 > max) { .... 読みこんだ行の数字が max より大きいか。
            max = $0 .... もし大きければ max を入れかえる
        }
    }
    END{ .... 全ての行を調べたところで、
        print max .... max を表示しておしまい。
    }' suji

 このプログラムは正常に動作する。

 プログラミング言語の経験者の多くが、このプログラムの起動時の max の値がどうなっているのか気になるだろう。多くのプログラミング言語では変数の値を初期化しから使うのが定石になっている。そんな人たちは、

    BEGIN{
        max = 0
    }

と言った初期化をしたくなるだろう。

 awk の場合、コマンドを実行すると、最初に全ての変数が自動的に初期化される仕様になっている。変数の初期化は不要なのだ。

 さて、当初の目的はこれで達成できるのだけれども、次回はもう少し Unix らしい問題解決の方法を考えてみたい。