#!/bin/bash if test -e allp.csv then echo '表示したい値の番号を入力してください' echo '1.日積算降水量 2.日最高気温 3.日最低気温 4.日最低湿度' #allp.csvが存在する場合は"表示したい値の番号を入力してください”と表示した後、"1.日積算降水量 2.日最高気温 3.日最低気温 4.日最低湿度"と出力し、以下の作業を進める read nyuryoku #入力された番号を読み込む case $nyuryoku in 1) echo '日積算降水量' sort -t , -k 4,4 -n -r ./allp.csv | uniq -f3 -w5 -c > allf.csv #全てのデータのうち、降水量のデータのみ逆順に数字としてソートする。その後、uniqでデーターのフィールド3から5文字目までが等しい行は1つだけ残し、後は消す。-cで行の前に重複数を表示する。 sed -n '1,10 p' allf.csv > rank.csv cut -c 7 rank.csv > kazu.csv #all.csvの1〜10行目を取り出す(ここでは値の違う10種類)。そしてrank.csvの7文字目、つまりさっき-c処理をした重複数を取り出す tyouhuku=`awk '{ sum += $1 } END { print sum }' kazu.csv` #kazu.csvの1行目に10個の重複数が入っているので、awkで一行目の合計を出す。こ>れで上位10種類の重複数が分かった sort -t , -k 4,4 -n -r ./allp.csv > allp2.csv #ここで、allp.csvを降水量のみソートしたファイルを作っておく sed -n "1,$tyouhuku p" allp2.csv > rank2.csv #allp2.csvから10種類で重複した数ぶんのデータが取り出せる cut -d , -f22 rank2.csv > year.csv sed -i -e "s/$/年/" year.csv cut -d , -f23 rank2.csv > month.csv sed -i -e "s/$/月/" month.csv cut -d , -f1 rank2.csv > day.csv sed -i -e "s/$/日/" day.csv cut -d , -f4 rank2.csv > kekka.csv sed -i -e "s/$/mm/" kekka.csv paste -d "" year.csv month.csv day.csv kekka.csv #$rank2から西暦を抜き出し、year.csvに入れる。sedによってyear.csvの末尾に年を入れる。これを月、日、mmについても行い、最後に全て合わせて表示されるようにする rm allf.csv rm rank.csv rm kazu.csv rm allp2.csv rm rank2.csv rm year.csv rm month.csv rm day.csv rm kekka.csv ;; #ディレクトリ内がごちゃごちゃするので、今回作成したファイルを消す #2〜4も1と同様に進めていく 2) echo '日最高気温' sort -t , -k 8,8 -n -r ./allp.csv | uniq -f7 -w5 -c > allf.csv sed -n '1,10 p' allf.csv > rank.csv cut -c 7 rank.csv > kazu.csv tyouhuku=`awk '{ sum += $1 } END { print sum }' kazu.csv` sort -t , -k 8,8 -n -r ./allp.csv > allp2.csv sed -n "1,$tyouhuku p" allp2.csv > rank2.csv cut -d , -f22 rank2.csv > year.csv sed -i -e "s/$/年/" year.csv cut -d , -f23 rank2.csv > month.csv sed -i -e "s/$/月/" month.csv cut -d , -f1 rank2.csv > day.csv sed -i -e "s/$/日/" day.csv cut -d , -f8 rank2.csv > kekka.csv sed -i -e "s/$/℃/" kekka.csv paste -d "" year.csv month.csv day.csv kekka.csv rm allf.csv rm rank.csv rm kazu.csv rm allp2.csv rm rank2.csv rm year.csv rm month.csv rm day.csv rm kekka.csv ;; 3) echo '日最低気温' sort -t , -k 9,9 -n -r ./allp.csv | uniq -f8 -w5 -c > allf.csv sed -n '1,10 p' allf.csv > rank.csv cut -c 7 rank.csv > kazu.csv tyouhuku=`awk '{ sum += $1 } END { print sum }' kazu.csv` sort -t , -k 9,9 -n -r ./allp.csv > allp2.csv sed -n "1,$tyouhuku p" allp2.csv > rank2.csv cut -d , -f22 rank2.csv > year.csv sed -i -e "s/$/年/" year.csv cut -d , -f23 rank2.csv > month.csv sed -i -e "s/$/月/" month.csv cut -d , -f1 rank2.csv > day.csv sed -i -e "s/$/日/" day.csv cut -d , -f9 rank2.csv > kekka.csv sed -i -e "s/$/℃/" kekka.csv paste -d "" year.csv month.csv day.csv kekka.csv rm allf.csv rm rank.csv rm kazu.csv rm allp2.csv rm rank2.csv rm year.csv rm month.csv rm day.csv rm kekka.csv ;; 4) echo '日最低湿度' sort -t , -k 11,11 -n -r ./allp.csv | uniq -f10 -w5 -c > allf.csv sed -n '1,10 p' allf.csv > rank.csv cut -c 7 rank.csv > kazu.csv tyouhuku=`awk '{ sum += $1 } END { print sum }' kazu.csv` sort -t , -k 11,11 -n -r ./allp.csv > allp2.csv sed -n "1,$tyouhuku p" allp2.csv > rank2.csv cut -d , -f22 rank2.csv > year.csv sed -i -e "s/$/年/" year.csv cut -d , -f23 rank2.csv > month.csv sed -i -e "s/$/月/" month.csv cut -d , -f1 rank2.csv > day.csv sed -i -e "s/$/日/" day.csv cut -d , -f11 rank2.csv > kekka.csv sed -i -e "s/$/%/" kekka.csv paste -d "" year.csv month.csv day.csv kekka.csv rm allf.csv rm rank.csv rm kazu.csv rm allp2.csv rm rank2.csv rm year.csv rm month.csv rm day.csv rm kekka.csv ;; *) echo '1〜4を入力してください。最初からやり直してください。' exit ;; esac #1〜4以外の数字を入れた時、'1〜4を入力してください。最初からやり直してください。'と表示する else echo '先にquiz2pp.shを実行して下さい' fi #allp.csvが存在しない場合は'先にquiz2pp.shを実行して下さい'と出力し、このスクリプトを終了する。