#!/bin/bash number=2008 while [ $number -le 2017 ] #2008年から始めて2017年までのデータについて以下の作業(作業1とする)を繰り返し行う do DATA=`ls data$number.csv` #ある年の気象データを開いたものをDATAとおく sed -n '4p' $DATA > data$number-1.txt #4行目のDATAの中身を抜き出し、data$number-1.txtに書き込む number2=1 #number2を1とする while : do #以下の作業(作業1-2とする)を繰り返す word=`cut -f $number2 -d "," data$number-1.txt` #wordをdata$number-1.txtのnumber2行目の文字列とする if [ "$word" = '最高気温(℃)' ] then cut -f $number2 -d "," $DATA > hightemp$number.txt number2=`expr $number2 + 1` #wordが最高気温(℃)のとき、DATAのnumber2列目を抜き出し、hightemp$number.txtに書き込む。number2を1増やし、作業1-2を繰り返す elif [ "$word" = '平均気温(℃)' ] then cut -f $number2 -d "," $DATA > avetemp$number.txt number2=`expr $number2 + 1` #wordが平均気温(℃)のとき、DATAのnumber2列目を抜き出し、avetemp$number.txtに書き込む。number2を1増やす elif [ "$word" = '年月日' ] then cut -f $number2 -d "," $DATA > yymmdd$number.txt number2=`expr $number2 + 1` #wordが年月日のとき、DATAのnumber2列目を抜き出し、yymmdd$number.txtに書き込む。number2を1増やす elif [ -e "hightemp$number.txt" ] && [ -e "avetemp$number.txt" ] && [ -e "yymmdd$number.txt" ] then break #hightemp$number.txt,avetemp$number.txt,yymmdd$number.txtがすべて存在すれば、作業1-2を終了する else number2=`expr $number2 + 1` fi done #その他の場合は、number2に1をたして、作業1-2を繰り返し行う paste -d "," yymmdd$number.txt hightemp$number.txt avetemp$number.txt > data2$number-1.txt #区切り文字を,として、yymmdd$number.txt,hightemp$number.txt,avetemp$number.txtの順に横につなげたデータを、data2$number-1.txtに保存する grep '/[0-9]' data2$number-1.txt | sed '1d' > data3$number-1.txt #data2$number-1.txtの1~6行目を削除したデータを、data3$number-1.txtに保存する number3=1 while : do #number3を1とし、以下の作業を条件が満たされるまで繰り返す HT=`cut -f 2 -d "," data3$number-1.txt | awk 'NR=='$number3''` HT2=`echo $HT | sed s/\.[0-9,]*$//g` #HTをdata3$number-1.txtの2列目のnumber3行目の値(number3行目の最高気温)とし、HT2をHTの少数を切り捨てたものとする if [[ $HT2 -ge 25 ]] then awk 'NR=='$number3'' data3$number-1.txt >> 25degree.txt break #HT2が25以上であれば、data3$number-1.txtのnumber3行目のデータを抜き出し、25degree.txtに保存して、作業1-3を終了する else number3=`expr $number3 + 1` fi done #その他の場合は、number3を1増やして作業1-3を繰り返す number=`expr $number + 1` done #numberに1を足して作業1を繰り返し、numberが2017になるまで行う cut -f 1 -d "," 25degree.txt > yymmdd2.txt #25degree.txtの1列目のデータ(日付データ)を抜き出し、yymmdd2.txtに保存する cut -f 2 -d "," 25degree.txt > hightemp2.txt #25degree.txtの2列目のデータ(最高気温データ)を抜き出し、hightemp2.txtに保存する cut -f 3 -d "," 25degree.txt > avetemp2.txt #25degree.txtの3列目のデータ(平均気温データ)を抜き出し、avetemp2.txtに保存する paste -d / yymmdd2.txt avetemp2.txt hightemp2.txt > 25degree2.txt #区切り文字を/としてyymmdd2.txt,avetemp2.txt,hightemp2.txtを横につなげたデータを、25degree2.txtに保存する sort -t "/" -k 2,2n -k 3,3n -k 4,4nr 25degree2.txt > 25degree3.txt #25degree2.txtのデータを月の早い順(25degree2.txtの2列目を昇順)に並べ替え、月が同じ場合は、月が同じデータを比較し、日付が早い順(25degree2.txtの3列目を昇順)に並べ替え、月日が同じ場合は、月日が同じデータを比較し、平均気温が高い順(25degree2.txtの4列目を降順)に並べ替え、25degree3.txtに保存する num=1 while test $num -le 10 do echo $num >> num.txt num=`expr $num + 1` done #1~10の数字列のファイル、num.txtを作る cat num.txt | sed "s/$/"位"/" > numnum.txt #num.txtのデータの末尾に”位”をつけて、numnum.txtに保存する cut -d "/" -f 1 25degree3.txt | sed "s/$/"年"/" > yy.txt #25degree3.txtの1列目のデータを抜き出し、末尾に”年”をつけて、yy.txtに保存する cut -d "/" -f 2 25degree3.txt | sed "s/$/"月"/" > mm.txt #25degree3.txtの2列目のデータを抜き出し、末尾に”月”をつけて、mm.txtに保存する cut -d "/" -f 3 25degree3.txt | sed "s/$/"日"/" > dd.txt #25degree3.txtの3列目のデータを抜き出し、末尾に”日”をつけて、dd.txtに保存する cut -d "/" -f 5 25degree3.txt | sed "s/$/"度"/" > tt.txt #25degree3.txtの5列目のデータを抜き出し、末尾に”度”をつけて、tt.txtに保存する paste -d "," yy.txt mm.txt dd.txt > ymd.txt #区切り文字を,とし、yy.txt,mm.txt,dd.txtの順に横につなげたデータを、ymd.txtに保存する tr -d "," < ymd.txt > ymd2.txt #ymd.txtの区切り文字,を削除したデータを、ymd2.txtに保存する paste numnum.txt ymd2.txt tt.txt #numnum.txt,ymd2.txt,tt.txtを横につなげたデータを表示する rm *.txt #txtファイルを削除する