#!/bin/bash #「&」を「,」に変換して、コンマ区切りによるawkの処理に持ち込む sed -e 's/&/,/g' kadai2_data.csv > NEW_kadai2_data.csv #[都道府県と市区町村の入力] #都道府県の入力を求め、変数 prefe を得る echo "都道府県名を入力してください(ローマ字表記,大文字)" read prefe #2行目以降にある、1列目の全ての文字列(都道府県)を、PREFE としてawkでリストアップ PREFE=`awk 'BEGIN{FS=","} (NR > 1){print $1}' NEW_kadai2_data.csv` #prefe と PREFEが完全に一致するものが無かった場合、再度都道府県の入力を促す while ! `echo "$prefe" | grep -q -x "$PREFE"` do echo "!一致する都道府県がありません!" echo "都道府県名を再度入力してください(ローマ字表記,大文字)" read prefe done #入力された都道府県と、文字列が完全に一致する行だけを抽出する #同一名称の市町村の混同を防ぐため(北海道と福島県にある、伊達市など) awk -F, '$1 == "'$prefe'" {print}' NEW_kadai2_data.csv > NEW2_kadai2_data.csv #市区町村の入力を求め、変数 city を得る echo "市区町村名を入力してください(ローマ字表記,大文字)" read city #2列目の全ての文字列(入力都道府県の市区町村)を、 CITY としてawkでリストアップ CITY=`awk 'BEGIN{FS=","} {print $2}' NEW2_kadai2_data.csv` #入力された city と CITY について完全に一致するものが無かった場合、再度、市区町村の入力を促す while ! `echo "$city" | grep -q -x "$CITY"` do echo "!一致する市区町村がありません!" echo "市区町村名を再度入力してください(ローマ字表記,大文字)" read city done #[入力された場所のデータの取得] #入力された都道府県と市区町村の文字列に、完全に一致する行を抽出 #但し、その際行番号とコロンも付随するので、それらは除去した上でcalc1.txtへ出力する grep -n "$prefe,$city," NEW_kadai2_data.csv | sed -e 's/.*://g' > calc1.txt #出力された数値を、緯度、経度、光害指数に関する変数と定義する IDO=`awk 'BEGIN{FS=","} {print $3}' calc1.txt` KEIDO=`awk 'BEGIN{FS=","} {print $4}' calc1.txt` LPI=`awk 'BEGIN{FS=","} {print $5}' calc1.txt` #[計算・並べ替え・結果の出力] #基本的な配置はそのままに、指定された場所からそれぞれの場所までの、南北方向の距離(km)と東西方向の距離(km)を求める awk -F, '(NR > 1){print $1, $2, (($3 - '${IDO}') * 3.6) * 30.82, (($4 - '${KEIDO}') * 3.6) * 25.11, $5}' NEW_kadai2_data.csv > calc2.txt #上で行った処理を基に、指定場所から各地点までの距離(km)を求める awk '{print $1, $2, sqrt(($3)^2 + ($4)^2), $5}' calc2.txt > calc3.txt #距離(3列目)が100 km以下の行だけを抽出し、さらに光害指数が低い順に並べ替える #並べ替えたものについて、先頭3行をsyorikekka.txtに移す(3を10に変えれば、上位10地点を表示できる) awk '$3 <= 100{print}' calc3.txt | sort -k 4,4n | head -n 3 > syorikekka.txt #syorikekka.txtから距離の要素だけ除外し、結果表示用ファイルに出力 cat syorikekka.txt | awk '{print $1, $2, $4}' > saisyukekka.txt #結果の出力 echo "この場所の光害指数は" echo "$LPI" echo "周辺100 km 以内にある,光害指数が低い場所は" cat saisyukekka.txt #処理によって生じた余分なファイルの削除 rm NEW_kadai2_data.csv rm NEW2_kadai2_data.csv rm calc1.txt rm calc2.txt rm calc3.txt rm syorikekka.txt rm saisyukekka.txt