awkには最大値を算出する関数は用意されていないので、自作する必要がありました。
フィールド(列)を指定した最大値算出は、データ処理にとても便利なので、使っていくとどんどん世界が広がります。

スポンサーリンク

サンプルコード

まずはサンプルコードです。
in.txtの4フィールド目(4列目)の最大値を算出しています。
sample.awkを実行すると、最大値が算出されています。

いくつかポイントを下記に解説してみます。

スポンサーリンク

まずは初期値の設定を慎重にすることが大事

まずは初期値を変数maxに設定します。

初期値の設定方法は色々とあると思います。
今回採用した方法は、1行目を読み込んだら初期値として設定する方法です。
カウンターを設けて、カウンターが0の場合は、初期値として設定しました。

BEGINブロックでカウンターを0とし、

1行目の処理をした時(カウンターが0の時)に、下記のように初期値を設定しています。

NR変数は使用していません。
NR変数で1行目を判定するのもありだと思いますが、最大値を算出するレコード(行)の範囲を変更した場合(1行目を最大値の算出対象としなかった場合)には、初期値の設定がされなくなってしまいます。

1行ずつ読み込んで、最大値を更新していく

あとは、1行ずつ読み込んで、変数maxの値と取得したフィールド(列)の値を比較して、
変数maxより大きければ変数maxを更新する基本的な計算方法です。

最大値の更新が終了したら、ENDブロックで最大値を出力

全ての行の読み込んが終了して最大値の更新が終了したら、最大値を出力します。
ENDブロックで最大値を出力すればOK。

スポンサーリンク