#!/bin/bash if test -e all.csv then echo "知りたい項目は何ですか。以下の1〜4の数字を入力してください。" echo "1.日最高気温,2.日最低気温,3.日積算降水量,4.日最小湿度" read number #入力された数字によって場合分けをする。1〜4以外の数字が打ち込まれた時のエラー処理もする。 case $number in 1)a=8 b=7 c='-r' d='℃' ;; 2)a=9 b=8 c='-r' d='℃' ;; 3)a=4 b=3 c='-r' d='mm' ;; 4)a=11 b=10 c='' d='%' ;; *)echo "1~4の数字を入力してください。" exit 0;; esac #all.csvのファイルを値の大きい順(または小さい順)に並べ替えたものをall2.csvに入れる。次にuniqコマンドにより重複された行を削除し、-cにより重複された行の数を表示する。そして上から10個の値の行を抜き出し、空白が6文字分表示された後に重複された行の数が表示されるので、1文字目から7文字目までを切り取り重複数を取り出す。その重複数を足していき、上位(または下位)10種類の値のすべての合計の個数を知る。 sort -t , -k$a -n $c all.csv > all2.csv ag=0 for rd in `uniq -f$b -w5 -c all2.csv | head -n 10 | cut -c1-7` do ag=`expr $ag + $rd` done #all2.csvの上から$ag個だけ取り出す。","で区切ったフィールドの$a番目が実際の気象のデータの値で、","で区切ったフィールドの22番目が年月で、さらに-で区切った時の1番目が年、2番めが月で、最後に","で区切ったフィールドの1番目が日である。その4つをそれぞれ取り出し変数var1,var2,var3,var4とする。 var1=`head -n$ag all2.csv | cut -d , -f $a` var2=`head -n$ag all2.csv | cut -d , -f 22 | cut -d - -f 1` var3=`head -n$ag all2.csv | cut -d , -f 22 | cut -d - -f 2` var4=`head -n$ag all2.csv | cut -d , -f 1` #気象データの値をvalue、年をyear、月をmonth、日をdateとし、上記のvar1,var2,var3,var4を変数として代入し、配列させる。 value=($var1) year=($var2) month=($var3) date=($var4) #年月日と気象データの値を表示させるため、seqコマンドで0から$agより1小さい数までの連続した数字の列を表示し、その分だけforループさせる。 turn=0 for turn in `seq 0 $(($ag-1))` do echo "${year[$turn]}年${month[$turn]}月${date[$turn]}日 ${value[$turn]}$d" done else echo "先にquiz2.shを実行してください" fi