#!/bin/bash #数値の入力 #1〜3を入力すれば出力結果を表示、それ以外ならば再度入力させる。詳しくは後述。何も表示しないechoは改行のため。 echo echo 表示したい値の番号を入力してください echo 1.猛暑日の日数 2.真夏日の日数 3.夏日の日数 read numbar #数値入力による場合分けと入力エラーの表示 #while:で無限ループを作り、1〜3が入力された場合はそれぞれの選択肢の条件に対応する気温を変数に設定し、次へ進む。それ以外は再度入力させ、whileループの最初に戻って1〜3が入力されているかの確認をする。 while : do if [ $numbar = 1 ] then x=35 break elif [ $numbar = 2 ] then x=30 break elif [ $numbar = 3 ] then x=25 break fi echo echo 1,2,3から選択してください read numbar done #1,2,3が入力された場合は以下の文章を表示し、次へ進む。 echo echo 出力結果を表示します echo #年別最高気温データの作成 #forを用い、2005〜2014までのデータの処理を行う。最高気温のデータは、,で区切られたフィールドの8つ目にあるので、cutで抜き出し、同時にtrでエラーの原因となる")・]"を削除する。それを一時的にtempa$i.txtへ保存。ここに保存されているデータは小数点以下を含んだ数値であるから、次にそれらの数値の小数点以下切り捨てを行う。sedでtempa$i.txt内の数値の切り捨てをし、出力結果をtempb$i.txtへ保存する。 for i in 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 do cut -d , -f 8 kadai2_data/$i-* | tr -d ") ]" > tempa$i.txt sed s/\.[0-9]*$//g tempa$i.txt > tempb$i.txt #日数カウントの初期値設定 #このnはこの後のifの条件を満たす数値の個数、即ち、目的の日数を表す。初めは0に設定しておく。 n=0 #データ読み込み #先ほど作成したtempb$i.txtの読み込みをする。while read lineにより、データを1行読み込み、done < tempb$i.txt までの処理を行い、次の行を読み込み・・・、というループを作っている。 while read line do #日数カウント #最初の場合分けから決定したそれぞれの条件(気温)を満たす数値の個数(日数)をカウントする。条件を満たす場合はn+1をしてカウントする。 if [ $line -ge $x ] then n=$((n+1)) fi done < tempb$i.txt #条件を満たす日数の表示 #目的の出力を表示する。 echo $i年 $n日 #一時ファイルtempa$i.txt tempb$i.txtの消去 rm temp?$i.txt done #以上の処理をforループにより繰り返す。 echo #終了