#!/bin/sh #kadai2-2_dataディレクトリが存在する場合のみ以下に進む if [ -e 'kadai2-2_data' ] then #すべての気象データをall.csvファイルにまとめ入れ cat `ls kadai2-2_data/*` > all.csv #ガイドの表示 echo 表示したい値の番号を入力してください echo 1.日積算降水量 2.最高気温 3.最低気温 4.最低湿度 read number #入力された番号に応じて場合分け case "$number" in 1) #降水量の値を元に並べ替え sort=`sort -t , -k 4,4 -n -r ./all.csv` #必要な値(年月日と降水量)だけを切り取る echo -n "$sort\n" | cut -d , -f 22 > year.csv echo -n "$sort\n" | cut -d , -f 23 > month.csv echo -n "$sort\n" | cut -d , -f 1 > day.csv echo -n "$sort\n" | cut -d , -f 4 > rain.csv #変数設定 a=1 b=1 c=2 #aが11以上になるまで繰り返す while [ $a -lt 11 ] do #降水量のデータのb行目とc(=b+1)行目の値を抜き出して比較 numberb=`sed -n "${b}p" rain.csv` numberc=`sed -n "${c}p" rain.csv` result=`echo "$numberb > $numberc" | bc` if [ $result -eq 1 ] #b行目の値のほうがc行目の値よりも大きい時 then #rank.csvファイルに順位となる数値aを挿入 echo $a >> rank.csv #bとcの値を1ずつ増やす b=`expr $b + 1` c=`expr $c + 1` #次の行(b行)の順位はb位になるのでaにbの値を代入 a=$b #b行目とc行目の値が同じ時 else #上と同様 echo $a >> rank.csv b=`expr $b + 1` c=`expr $c + 1` #次の行の順位は今の行の順位と同じになるのでaの値はそのまま fi done #表示したいのは(a-1)行目までなので1行目から(a-1)行目までを抽出する d=`expr $a - 1` sed -n "1,${d}p" year.csv > year1.csv sed -n "1,${d}p" month.csv > month1.csv sed -n "1,${d}p" day.csv > day1.csv sed -n "1,${d}p" rain.csv > rain1.csv #各ファイルの各行に単位を付け足す sed -e 's/$/位/' rank.csv > rank2.csv sed -e 's/$/年/' year1.csv > year2.csv sed -e 's/$/月/' month1.csv > month2.csv sed -e 's/$/日/' day1.csv > day2.csv sed -e 's/$/mm/' rain1.csv > rain2.csv #各ファイルを横に並べて表示する paste rank2.csv year2.csv month2.csv day2.csv rain2.csv #最後に途中で作られた各csvファイルを削除する rm all.csv year.csv year1.csv year2.csv month.csv month1.csv month2.csv day.csv day1.csv day2.csv rain.csv rain1.csv rain2.csv rank.csv rank2.csv ;; #以下は1)の場合とほぼ同様(変数が異なる) 2) sort=`sort -t , -k 8,8 -n -r ./all.csv` echo -n "$sort\n" | cut -d , -f 22 > year.csv echo -n "$sort\n" | cut -d , -f 23 > month.csv echo -n "$sort\n" | cut -d , -f 1 > day.csv echo -n "$sort\n" | cut -d , -f 8 > maxt.csv a=1 b=1 c=2 while [ $a -lt 11 ] do numberb=`sed -n "${b}p" maxt.csv` numberc=`sed -n "${c}p" maxt.csv` result=`echo "$numberb > $numberc" | bc` if [ $result -eq 1 ] then echo $a >> rank.csv b=`expr $b + 1` c=`expr $c + 1` a=$b else echo $a >> rank.csv b=`expr $b + 1` c=`expr $c + 1` fi done d=`expr $a - 1` sed -n "1,${d}p" year.csv > year1.csv sed -n "1,${d}p" month.csv > month1.csv sed -n "1,${d}p" day.csv > day1.csv sed -n "1,${d}p" maxt.csv > maxt1.csv sed -e 's/$/位/' rank.csv > rank2.csv sed -e 's/$/年/' year1.csv > year2.csv sed -e 's/$/月/' month1.csv > month2.csv sed -e 's/$/日/' day1.csv > day2.csv sed -e 's/$/℃ /' maxt1.csv > maxt2.csv paste rank2.csv year2.csv month2.csv day2.csv maxt2.csv rm all.csv year.csv year1.csv year2.csv month.csv month1.csv month2.csv day.csv day1.csv day2.csv maxt.csv maxt1.csv maxt2.csv rank.csv rank2.csv ;; 3) sort=`sort -t , -k 9,9 -n -r ./all.csv` echo -n "$sort\n" | cut -d , -f 22 > year.csv echo -n "$sort\n" | cut -d , -f 23 > month.csv echo -n "$sort\n" | cut -d , -f 1 > day.csv echo -n "$sort\n" | cut -d , -f 9 > mint.csv a=1 b=1 c=2 while [ $a -lt 11 ] do numberb=`sed -n "${b}p" mint.csv` numberc=`sed -n "${c}p" mint.csv` result=`echo "$numberb > $numberc" | bc` if [ $result -eq 1 ] then echo $a >> rank.csv b=`expr $b + 1` c=`expr $c + 1` a=$b else echo $a >> rank.csv b=`expr $b + 1` c=`expr $c + 1` fi done d=`expr $a - 1` sed -n "1,${d}p" year.csv > year1.csv sed -n "1,${d}p" month.csv > month1.csv sed -n "1,${d}p" day.csv > day1.csv sed -n "1,${d}p" mint.csv > mint1.csv sed -e 's/$/位/' rank.csv > rank2.csv sed -e 's/$/年/' year1.csv > year2.csv sed -e 's/$/月/' month1.csv > month2.csv sed -e 's/$/日/' day1.csv > day2.csv sed -e 's/$/℃ /' mint1.csv > mint2.csv paste rank2.csv year2.csv month2.csv day2.csv mint2.csv rm all.csv year.csv year1.csv year2.csv month.csv month1.csv month2.csv day.csv day1.csv day2.csv mint.csv mint1.csv mint2.csv rank.csv rank2.csv ;; 4) #4)は最低湿度の値を元に小さい順に並べ替え sort=`sort -t , -k 11,11 -n ./all.csv` echo -n "$sort\n" | cut -d , -f 22 > year.csv echo -n "$sort\n" | cut -d , -f 23 > month.csv echo -n "$sort\n" | cut -d , -f 1 > day.csv echo -n "$sort\n" | cut -d , -f 11 > minh.csv a=1 b=1 c=2 while [ $a -lt 11 ] do numberb=`sed -n "${b}p" minh.csv` numberc=`sed -n "${c}p" minh.csv` result=`echo "$numberb < $numberc" | bc` if [ $result -eq 1 ] #b行目の値のほうがc行目の値よりも小さい時 then echo $a >> rank.csv b=`expr $b + 1` c=`expr $c + 1` a=$b #b行目とc行目の値が同じ時 else echo $a >> rank.csv b=`expr $b + 1` c=`expr $c + 1` fi done d=`expr $a - 1` sed -n "1,${d}p" year.csv > year1.csv sed -n "1,${d}p" month.csv > month1.csv sed -n "1,${d}p" day.csv > day1.csv sed -n "1,${d}p" minh.csv > minh1.csv sed -e 's/$/位/' rank.csv > rank2.csv sed -e 's/$/年/' year1.csv > year2.csv sed -e 's/$/月/' month1.csv > month2.csv sed -e 's/$/日/' day1.csv > day2.csv sed -e 's/$/%/' minh1.csv > minh2.csv paste rank2.csv year2.csv month2.csv day2.csv minh2.csv rm all.csv year.csv year1.csv year2.csv month.csv month1.csv month2.csv day.csv day1.csv day2.csv minh.csv minh1.csv minh2.csv rank.csv rank2.csv ;; #入力された番号が1~4のどれでもない場合、エラーメッセージを表示 *) echo 入力が間違っています ;; esac #kadai2-2_dataディレクトリが存在しない場合はエラーメッセージを表示 else echo 先にquiz2_pre.shを実行してください fi