#!/bin/bash #同じディレクトリ内の全てのcsvファイルに対し、do以下の処理を繰り返す #その年初めて夏日となった日の気象データを、1箇所(hikaku2.txt)に集める files="*.csv" for file in ${files} do #[欲しいデータが何列目に存在するかを求めていく] #気象要素名が列挙された行を抽出し、一列に並び替える cat ${file} | grep "年月日" | tr ',' '\n' > syori.txt #課題に於いて必要となる3要素が何行目(=何列目)にあるかを求める grep -e "年月日" -n syori.txt > syori2.txt grep -e "最高気温(℃)" -n syori.txt >> syori2.txt grep -e "平均気温(℃)" -n syori.txt >> syori2.txt #この先必要となるのは何列目という数字だけであるから、数字以降の文字列を除去した上で、syori3.txtに出力する sed -e 's/:.*//g' syori2.txt > syori3.txt #3要素が何列目に存在するかを、変数として得る(年月日、最高気温、平均気温) DATE=`sed -n '1p' syori3.txt` MAX=`sed -n '2p' syori3.txt` AVERAGE=`sed -n '3p' syori3.txt` #[3要素のみを抜き出して、その年最初の夏日の日のデータを1箇所に集約する] #日付、最高気温、平均気温の列だけを抜き出して、hikaku.txtへ出力 cat ${file} | awk -v date=$DATE -v max=$MAX -v average=$AVERAGE -F, '(NR > 6) {print $date, $max, $average}' ${file} > hikaku.txt #2列目(最高気温)が最初に25.0以上となった行を、更にhikaku2.txtに出力 #for文のループによって、年数分のデータが蓄積する cat hikaku.txt | awk '$2 >= 25.0{print}' | head -n 1 >> hikaku2.txt done #[並べ替えと結果の出力] #年月日のスラッシュを空白に変換し、sortによる処理を簡単にする #月を昇順に並べ、同じなら日を昇順に並べる。いずれも同じならば、平均気温を降順に並べさせる sed -e 's/\// /g' hikaku2.txt | sort -k2,2n -k3,3n -k5,5nr | cat -n > hikaku3.txt #「実行結果の例」と同様になるよう、形を整える awk '{print $1, "位", $2, "年", $3, "月", $4, "日", $5, "度"}' hikaku3.txt > kekka.txt #結果の表示 cat kekka.txt #実行により生じた余分なファイルの削除 rm syori.txt rm syori2.txt rm syori3.txt rm hikaku.txt rm hikaku2.txt rm hikaku3.txt rm kekka.txt