以前下記の記事で紹介した応用編です。
[Linux]awkでフィールド(列)の最大値を求める
単に1列全てを最大値算出の対象にするのではなく、条件によって算出対象を絞ります。

スポンサーリンク

あるフィールド(列)の文字列で、対象レコード(行)を指定

メインブロックの条件部に、1フィールド(列)目の条件を追加

下記のように、1フィールド(列)目が2017であれば、そのレコード(行)の処理を実行するように、
条件部を設定しています。$1は、処理中のレコード(行)の1フィールド(列)目の値になります。

これで、1フィールド(列)目の値が2017の場合のみ、最大値の更新処理が行われます。
例えば、上記のin.txtの例なら、2017年を対象とした、最大値が算出できます。

サンプルコード

in.txtの1フィールド(列)目の文字列が2017の場合にのみ、最大値更新の処理を実行します。

スポンサーリンク

NR変数で対象レコード(行)を指定

メインブロックの条件部に、NR変数を使って条件を追加

NR変数で処理中のレコード(行)の値が取得できます。
下記のように条件部を設定することで、2レコード(行)目から6行目の処理が実行できます。

こういった条件部を設定することで、データ解析の幅がぐっと広がるので、プログラミングがより面白くなると思います。
レコード(行)の範囲を指定して処理範囲を簡単に変えることができるのは、awkの醍醐味と言えると思います。
より具体的なデータの可視化は、人間の理解を圧倒的に深めますし、発想が広がります。

サンプルコード

in2.txtの2レコード(行)から6レコード(行)までを処理対象とし、最大値を算出しています。

スポンサーリンク