今回はAWKで実際の温度データを処理してみます。ここでは日本の真ん中あたりにある長野県松本市の気温データを使用します。
これは気象庁が公開しているデータです。利用規約では出典とURLを記述することになっていますので以下に該当ページのURLを示します。

出典:気象庁ホームページ

この年間の温度データをタブ区切りテキストとして保存し利用します。ファイル名はdata.txtとしこれまでと同じようにデスクトップのsampleディレクトリに入れておきます。なお、温度データ内に幾つかの記号が含まれているため、それらの記号は削除してあります。また、執筆時点(2024/12)でのデータとなっているため一部の温度データは暫定となっています。

data.txtの中身は以下のようになっています。

○必要なデータを表示

 これまでのAWKの復習も兼ねて順番に処理していきます。まず、全データを表示して見ます。これは以下のようにコマンドを入力します。

awk {print} data.txt

データによっては先頭の1行が不要な場合があります。項目を示すヘッダーがついていることがありますが、データを処理する場合は不要なことがあります。
このような場合、先頭の1行を削除したファイルを作成する方法と先頭の1行をスキップする方法があります。AWKで先頭の1行をスキップして表示するには以下のようにします。

awk 'NR>1{print}' data.txt

それでは次に2000年より後のデータを表示してみます。この場合、年数は最初の1列目になっていますので、この値を読み込んで2000年より後のデータかどうかを判別すればよいことになります。最初の1列目の値は$0に入りますので以下のように$0>2000として判断します。その際、先頭の1行もスキップする必要があるので&&を使って複数の条件を満たすように指定します。

awk 'NR>1&&$0>2000{print}' data.txt

1月の気温だけを表示するには以下のように指定します。

awk 'NR>1{print $2}' data.txt

年数を表示しないとわからない場合は以下のように$1を加えます。

awk 'NR>1{print $1,$2}' data.txt

データが何年分あったか確認したい場合は以下のようにします。今回のデータの場合、先頭の1行分を除く必要があるため行番号を示すNRから1を引きます。

awk 'END{print NR-1}' data.txt

無理にAWKで処理しなくてもwcコマンドとパイプを使う方法もあります。

awk 'NR>1{print $1}' data.txt | wc -l

○1月の最低気温と最高気温を求める

 次に最低気温と最高気温を求めてみます。
まず、1月だけに絞って最低気温と最高気温を求めます。このような場合、AWKで全部処理しようとせずに他のコマンドを組み合わせて利用する方がUNIX的です。
 AWKで1月のデータを出力しsortコマンドで並び替えれば簡単にできます。

awk 'NR>1{print $2}' data.txt | sort -n

上記のコマンドではすべてのデータが表示されてしまいます。必要なのは最低気温、つまり先頭1行だけです。この場合はheadコマンドを使って1行だけ抜き出します。

awk 'NR>1{print $2}' data.txt | sort -n | head -n 1

最高気温の場合は先頭ではなく最終行なのでtailコマンドを使えばよいことになります。

awk 'NR>1{print $2}' data.txt | sort -n | tail -n 1

.
編集部おすすめ