#!/bin/bash cat kadai2_data.csv | awk '{sub(",.*", "");print}' > kencity.txt #kadai2_data.csvから都道府県名と市町村名のデータを抜き出し、kencity.txtに保存する cut -f 1 -d "&" kencity.txt > ken.txt #kencity.txtから都道府県名のデータのみを抜き出し、ken.txtに保存する echo "都道府県名を入力して下さい" #”都道府県名を入力して下さい”と表示する read KEN #入力された文字列を読み取り、読み取った文字列をKENとする grep -x "$KEN" ken.txt > ken2.txt #KENと完全に一致する行がken.txtにあれば、ken.txtのKENと一致する行をすべて取り出し、ken2.txtに保存する。一致する行がなければ、ken2.txtは空になる while [ ! -s "ken2.txt" ] do echo "該当する都道府県は存在しません" echo "都道府県名を入力して下さい" read KEN grep -x "$KEN" ken.txt > ken2.txt done #空でないken2.txtが作られるまで、つまり正しい都道府県名が入力されるまで、”該当する都道府県は存在しません”と表示し、”都道府県名を入力して下さい”と表示した後、KENを読み取り、ken2.txtを作る echo "該当する都道府県が見つかりました" #空でないken2.txtが作られたら、”該当する都道府県が見つかりました”と表示する grep "$KEN" kencity.txt > kencity2.txt #KENを含む行をkencity.txtからすべて抜き出し、kencity2.txtに保存する cut -f 2 -d "&" kencity2.txt > city.txt #kencity2.txtの市町村の部分だけを取り出し、city.txtに保存する echo "市町村名を入力して下さい" #”市町村名を入力して下さい”と表示する read CITY #入力された文字列を読み取り、読み取った文字列をCITYとする grep -x "$CITY" city.txt > city2.txt #CITYと完全に一致する行がcity.txtにあれば、city.txtのCITYと一致する行をすべて取り出し、city2.txtに保存する。一致する行がなければ、city2.txtは空になる while [ ! -s "city2.txt" ] do echo "該当する市町村は存在しません" echo "都道府県名を入力して下さい" read KEN grep -x "$KEN" ken.txt > ken2.txt while [ ! -s "ken2.txt" ] do echo "該当する都道府県は存在しません" echo "都道府県名を入力して下さい" read KEN grep -x "$KEN" ken.txt > ken2.txt done echo "該当する都道府県が見つかりました" grep "$KEN" kencity.txt > kencity2.txt cut -f 2 -d "&" kencity2.txt > city.txt echo "市町村名を入力して下さい" read CITY grep -x "$CITY" city.txt > city2.txt done #空でないcity2.txtが作られるまで、つまり正しい市町村名が入力されるまで、”該当する市町村は存在しません”と表示し、KENを読み取る作業からやり直す。正しい組み合わせの都道府県と市町村が入力されれば終了する echo "該当する市町村が見つかりました" #空でないcity2.txtが作られたら、”該当する市町村が見つかりました”と表示する echo "$KEN$CITYの光害指数は" #入力された都道府県の市町村の光害指数は、と表示する grep "$KEN&$CITY" kadai2_data.csv | awk -F, '{print $4}' #KEN&CITYの文字列を含むkadai2_data.csvの行の4列目、つまり該当地域の光害指数を表示する a1=`grep "$KEN&$CITY" kadai2_data.csv | awk -F, '{print $2}'` b1=`grep "$KEN&$CITY" kadai2_data.csv | awk -F, '{print $3}'` #該当地域の緯度経度をそれぞれa1,b1とする number=2 #numberを2とする。(kadai2_data.csvを2行目から読み取りたいため) while [ $number -lt `cat kadai2_data.csv | wc -l` ] do #numberがkadai2_data.csvのデータの行数-1(数値データの行数)になるまで、以下の作業(作業1)を繰り返す a2=`cut -d "," -f 2 kadai2_data.csv | awk "NR==$number"` b2=`cut -d "," -f 3 kadai2_data.csv | awk "NR==$number"` #number行目の地域の緯度経度をそれぞれa2,b2とする da=`echo "$a1 - $a2" | bc -l` db=`echo "$b1 - $b2" | bc -l` #二地域の緯度経度の差をそれぞれとる dc=`echo " scale=5; $da * 3600 * 30.82 " | bc -l` dd=`echo " scale=5; $db * 3600 * 25.11 " | bc -l` #緯度経度の差(単位は度)を、メートル単位に直す dx=`echo " scale=5; $dc ^ 2 " | bc -l` dy=`echo " scale=5; $dd ^ 2 " | bc -l` #dc,ddの二乗をそれぞれdx,dyとする L=`echo " scale=5; sqrt("$dx" + "$dy") " | bc -l` LL=`echo " scale=5; $L / 1000 " | bc -l` #dxとdyを足したものの平方根をとり、Lとする。さらに、Lの単位(m)を㎞に直したものをLLとする LLL=${LL%.*} #LLの少数点以下を切り捨てたものをLLLとする if [ $LLL -lt 100 ]; then awk "NR==$number" kadai2_data.csv >> in.txt #LLLが100より小さい場合は、kadai2_data.csvのnumber行目のデータをin.txtに保存する else awk "NR==$number" kadai2_data.csv >> out.txt fi #その他の場合は、kadai2_data.csvのnumber行目のデータをout.txtに保存する number=`expr $number + 1` done #numberに1をたして、作業1を繰り返す sort -t "," -n -k 4 in.txt | awk "NR==1,NR==3" > in2.txt #in.txtの4列目を数値的に昇順に並べ替え、並べ替えたデータの1~3行目を取り出し、in2.txtに保存する cut -d "," -f 1 in2.txt > in3.txt #in2.txtの1列目のデータ(地域名のデータ)を取り出し、in3.txtに保存する cut -d "," -f 4 in2.txt > in4.txt #in2.txtの4列目のデータ(光害指数のデータ)を取り出し、in4.txtに保存する paste in4.txt in3.txt > in5.txt #in4.txt in3.txtの順に横につなげたデータを、in5.txtに保存する echo "100㎞以内にある最も光害指数の低い場所3つは" cat in5.txt #”100㎞以内にある最も光害指数の低い場所3つは”の表示のあと、in5.txtを表示する #rm *.txt #txtファイルを削除する