[Exp2018]シェルスクリプト課題

提出について

  • 提出期限: 08/30 (木) 23:59
  • 修正期限: 09/07 (金) 17:00

レポートの作成方法

  • ITPASS サーバでレポートを公開するには を参照してください. また, 簡単なレポートの書き方指南 も良く読みましょう.
  • レポートの一番上に以下のことを必ず明記してください.
    • タイトル (例: ITPASS 実習レポート1)
    • 名前
      • 学籍番号は書かないでください.
    • 担当情報実験機名 (例: joho01)
  • レポートの HTML ファイルの名前は index.html にしてください. 複数の HTML ファイルを作る場合は, 以下の要件を満たすようにしてください.
    • index.html を表紙, 目次とする
    • どの HTML ファイルも index.html との相互リンクが張ってある
  • レポートのテンプレート を置いてあります. 自由に使ってもらってかまいません.
  • HTML の書き方については実習の時間内では解説しません. Web や書籍などで書き方を調べてください. 上記のテンプレートを参照するのもよいでしょう. これもレポートの一環としてがんばってください.
  • 問題の難易度を高めに設定しています. 解けない場合は, 未完成のスクリプトを提出し, どこまでできて, 何につまづいたかを詳しく解説してください. 問題そのものができていなくても, きちんとした解説があるレポートには高い評価を与えます.
  • 自力で頑張っても分からない場合は, 他の人が提出したレポート (実習のメーリングリストに投げられたレポート提出報告メールに 書かれている (はずの) URL から見られます) を参考にすることを推奨します. その場合, 参考にしたレポートを参考資料に挙げるようにしてください. また, 丸写しにするのではなく, 自分なりの改良も加えましょう.
  • 2009 年のレポート課題, 2010 年のレポート課題, 2011 年のレポート課題 , 2012 年のレポート課題 , 2013 年のレポート課題 , 2014 年のレポート課題 , 2015 年のレポート課題 , 2016 年のレポート課題 , 2017 年のレポート課題も参考にしてみてください.

授業時間外のレポート作成について

  • 自宅, 学内から ITPASS サーバ (ika-itpass) にログインする場合, [TEBIKI]SSHサーバへの公開鍵認証によるログイン を参考にして下さい.
    • Windows からの接続については, こちら

      • [TEBIKI]Tera Term を用いた SSH サーバへのログイン
      • [TEBIKI]Xming を用いた X (ウィンドウ) の飛ばし方
      • [TEBIKI]ITPASS サーバへのファイル転送方法

      を参考にすると良いでしょう.

    • なお, 学外からは情報実験機 (johoXX-itpass) に直接ログインすることはできません. 学外からは itpass サーバ (itpass.scitec.kobe-u.ac.jp) にログインし, itpass サーバから情報実験機に ssh でログインしましょう.
  • シェルスクリプトを作って実行するだけなら学内の Mac でもできます.
  • 507 号室にある自分の担当マシンは, 部屋の使用予定がない限り, 許可なく使ってもらってもよいです. ゼミなどで使用している場合も, その場で許可をとってもらえば使用してかまいません.
  • 507 号室への入室にあたり事前に許可は不要ですが, 鍵がかかっていて入れないことがあります. 希望者には鍵を貸し出しますので, TA にご一報ください.
  • 部屋を使用するときには, 506 号室 もしくは 508 号室にいる人に一言断ってから使用してください. [Exp2018]実習部屋(507号室)の使い方 もよく読んでください.

レポートの提出方法

ファイルを置く

今回のレポートは全て ITPASS サーバ (ika-itpass) の ~/public_html/report01/ 以下に置いてください. 置き場所となるディレクトリは必要に応じて自分で作ってください.

情報実験機で作ったファイルを ITPASS サーバに転送するには scp というコマンドを使うとよいでしょう. 詳しくは man を見てください. 各ファイルの置き方は以下のようにしてください.

  • html ファイルは ~/public_html/report01/ 以下に置く.
  • シェルスクリプトは ~/public_html/report01/scripts/ 以下に置く.
  • 結果として出力されたファイルは ~/public_html/report01/results/ 以下に置く.
  • 注意: 問題として配布するデータファイルは置かなくても結構です. ただし, どこからどうやって入手したかはレポート本文に明記しておきましょう.

ディレクトリ構造の例

/home/hoge/public_html/report01/
:
|-- index.html
|
|-- scripts/
|   |-- quiz1.sh.txt
|   |-- quiz2.sh.txt
|
|-- results/
|   |-- result1.txt
|   |-- result2.txt
:
  • 上の例にある hoge は自分のアカウント名に置き換えてください.

アップロード確認

ブラウザから全部のファイルにアクセスできるか確認してみましょう. 例えば, ITPASS サーバ (ika-itpass) では, ~/public_html/report01/index.html に対応する URL は

http://itpass.scitec.kobe-u.ac.jp/~(自分のアカウント名)/report01/index.html

になります.

提出完了の報告

提出期限までに以下のメールを送ってください. 内容を確認した後, 修正すべき点があればその旨を連絡します. 修正完了後, 再度メールで報告してください. こちらから, レポート提出完了のメールが送られた時点で レポートを提出したことになります.

  • メールの内容
    • 件名
      • 「ITPASS実習レポート ??/?? 出題分 (自分の氏名)」
    • 宛先
      • itpass のメーリングリスト
        • itpass-ml -at- itpass.scitec.kobe-u.ac.jp (-at- は @ に変更すること)
    • メール本文に必ず記入すること
      • 情報実験機番号
      • 氏名
      • レポートの URL

必須課題

問題 1

気象庁のデータを用いたスクリプト

2008年1月1日から2017年12月31日までの, 兵庫県神戸市で観測された日毎の気象データファイルがあります. このデータファイルは, 以下のようなディレクトリ構造になっています.

/home/hoge/kadai1_data
    |
    | -- data2008.csv    ( 2008年 のデータ )
    | -- data2009.csv    ( 2009年 のデータ )
    | -- data2010.csv    ( 2010年 のデータ )
    | -- ......

例えば, 2008年のデータファイルの各列には以下のように気象データが記述されています.

ダウンロードした時刻:yyyy/mm/dd ,,,,,,
,,,,,,
,神戸,神戸,神戸,神戸,神戸,神戸
年月日,平均雲量(10分比),最高気温(℃),降水量の合計(mm),平均気温(℃),平均蒸気圧(hPa),日照時間(時間)
,,,,,,
,,,,,,
2008/1/1,1,7.2,0,4,4.4,7.7
2008/1/2,3.8,8.8,0,5.2,5.2,6.9
2008/1/3,3.8,10.5,0,6.6,5.5,5
2008/1/4,4.5,11.8,0,7.3,6.1,5.5
2008/1/5,4.8,11.8,0,7.4,7.1,6.2

csv ファイルに関する詳細はこちら

これらのファイルに収められている日最高気温を使って, 兵庫県神戸市の2008年から2017年の各年において初めて夏日 (日最高気温が 25℃ を越える日) が来た月日を調べ, 月日の早い順に順位と年と最高気温を表示するスクリプトを作成してください.

注意点
  • csv ファイルごとに気象データの順番と数が異なります. 気象データの順番や数に関係なく, 必要なもののみを使えるスクリプトにしてください. 例えば, 2008 年のデータファイルが以下の二つのどちらであったとしても, どちらにも適切に対応できるスクリプトにしてください.
ダウンロードした時刻:yyyy/mm/dd ,,,,,,
,,,,,,
,神戸,神戸,神戸,神戸,神戸,神戸
年月日,平均雲量(10分比),最高気温(℃),降水量の合計(mm),平均気温(℃),平均蒸気圧(hPa),日照時間(時間)
,,,,,,
,,,,,,
2008/1/1,1,7.2,0,4,4.4,7.7
2008/1/2,3.8,8.8,0,5.2,5.2,6.9
2008/1/3,3.8,10.5,0,6.6,5.5,5
2008/1/4,4.5,11.8,0,7.3,6.1,5.5
2008/1/5,4.8,11.8,0,7.4,7.1,6.2


ダウンロードした時刻:yyyy/mm/dd  ,,,,,,
,,,,,,
,神戸,神戸,神戸,神戸,神戸,神戸
年月日,降水量の合計(mm),平均蒸気圧(hPa),日照時間(時間),最高気温(℃),平均気温(℃)
,,,,,
,,,,,
2008/1/1,0,4.4,7.7,7.2,4
2008/1/2,0,5.2,6.9,8.8,5.2
2008/1/3,0,5.5,5,10.5,6.6
2008/1/4,0,6.1,5.5,11.8,7.3
2008/1/5,0,7.1,6.2,11.8,7.4
  • 複数の年で最初に夏日が来た月日が同じである場合は, その日の平均気温が高い順に順位付けしてください.
事前準備

スクリプトを作成する前に, ITPASSサーバ上のデータファイルを自分のホームディレクトリに持ってきてください.

次のコマンドをITPASSサーバで実行します.

cp /home/itpass/dc-arch/exp/fy2018/180807/practice_kadai/kadai1_data.tar.gz /home/hoge/

自分が使用している情報実験機にデータをコピーしてください.

cd ~hoge                                                       
scp  ./kadai1_data.tar.gz hoge@10.35.19.??:~         

?? には, 自分が使用している情報実験機のIPアドレスを入力してください.

次のコマンドを情報実験機で実行します.

気象データは圧縮ファイルにまとめられています. tar コマンドを用いて圧縮ファイルを展開してください.

cd ~hoge
tar xvzf ./kadai1_data.tar.gz
レポートに書く内容

レポート内には以下を記述してください. ただしリンクを貼る際は相対パスで指定するようにしてください.

  • シェルスクリプトファイル quiz1.sh.txt へのリンク

    上記で作成した quiz1.sh を quiz1.sh.txt という名前に変更してください. ブラウザ上から読めるようにするためです.

  • シェルスクリプトの解説

    スクリプト内の各行が何をしているのか, スクリプト内にコメント文として書く.

  • スクリプトの使い方の解説

    これをもとに TA が実際にテストします.  実行する際のスクリプト, データの置き場を明示すること.

  • 実行例 result1.txt へのリンク

    実行例とは, スクリプトの作業記録です. 自分が実際にスクリプトを実行したときのコンソールをテキストファイルにコピーするなどしてください.

  • 参考資料

    URL をベタ書きにするのではなく, そのページの作者やタイトル, および何を参考にしたのかも明記する.

  • 共同作業した人の名前
  • 工夫したこと, 感想など

実行結果の例

$ ./quiz1.sh
1位 2009年4月11日 25.6度
2位 2012年4月28日 26.2度
3位 2015年5月1日 26.2度
4位 2017年5月1日 26.2度
5位 2016年5月1日 25.2度
6位 2008年5月3日 29.5度
7位 2010年5月4日 26.1度
8位 2011年5月8日 25.0度
9位 2013年5月9日 27.3度
10位 2014年5月19日 25.3度

なお, 本課題に使用するデータは, 気象庁のHP"過去の気象データ"をもとに作成しました.

問題 2

光害指数が最も低い場所を探すシェルスクリプト

47 都道府県の市町村名, 緯度経度座標, 光害指数 (Light Pollution Index; LPI) のデータが入ったデータファイルを用いて, 都道府県名と市町村名を入力することで, 下の情報を表示するシェルスクリプトを作成してください.

  • 入力した市町村での光害指数
  • 入力した市町村から半径 100km 以内にある, 光害指数が最も小さい 3 つの市町村名とそこでの光害指数
    • ただし, その 3 つの市町村名と光害指数は, 光害指数の小さい順に表示してください.

また, リストにない市町村名を入力した場合のエラー処理も行ってください.

注意点
  • データファイルには以下のようにデータが記述されています.
PREFECTURE&CITY,latitude,longitude,LPI
HOKKAIDO&SAPPOROSHICHUOKU,43.05539,141.34098,6615.81
HOKKAIDO&SAPPOROSHIKITAKU,43.090691,141.340922,5953.06
HOKKAIDO&SAPPOROSHIHIGASHIKU,43.076111,141.363616,6448.43
HOKKAIDO&SAPPOROSHISHIROISHIKU,43.045445,141.396378,7817.06
HOKKAIDO&SAPPOROSHITOYOHIRAKU,43.031366,141.379978,6735.66
  • 市町村間の距離を計算するときには以下の式を用いてください.
    • 2 点間の距離 L は L=(Δx^2+Δy^2)^0.5
      • Δx : 東西方向への移動距離 Δx = 25.11×Δλ(m)
      • Δy : 南北方向への移動距離 Δy = 30.82×Δφ(m)
        • 経度の差(秒単位) Δλ
        • 緯度の差(秒単位) Δφ

 (この式は, 北緯 36 度付近で適用できる近似式です. 正確に計算するためには球面の効果を考慮して計算する必要がありますが, 今回は上式を用いることにします.)

事前準備

スクリプトを作成する前に, ITPASSサーバ上のデータファイルを自分のホームディレクトリに持ってきてください.

次のコマンドをITPASSサーバで実行します.

cp /home/itpass/dc-arch/exp/fy2018/180807/practice_kadai/kadai2_data.tar.gz /home/hoge/

自分が使用している情報実験機にデータをコピーしてください.

cd ~hoge                                                       
scp  ./kadai2_data.tar.gz hoge@10.35.19.??:~         

?? には, 自分が使用している情報実験機のIPアドレスを入力してください.

次のコマンドを情報実験機で実行します.

データは圧縮ファイルにまとめられています. tar コマンドを用いて圧縮ファイルを展開してください.

cd ~hoge
tar xvzf ./kadai2_data.tar.gz
ヒント
  • シェルスクリプト内の計算で小数を扱う際は bc コマンドを用いてください. 例えば, 変数 num に x^2+y^2 の平方根をとった値を代入するときには num = `echo "sqrt( x^2+y^2 )" | bc -l` (-l オプションは標準数学ライブラリを使用します.)
  • 適宜 bc コマンドをインストールしてください
$ sudo apt-get install bc 
レポートに書く内容

レポート内には以下を記述してください. ただしリンクを貼る際は相対パスで指定するようにしてください.

  • シェルスクリプトファイル quiz2.sh.txt へのリンク 上記で作成した quiz2.sh を quiz2.sh.txt という名前に変更してください. ブラウザ上から読めるようにするためです.
  • シェルスクリプトの解説

    スクリプト内の各行が何をしているのか, スクリプト内にコメント文として書く.

  • スクリプトの使い方の解説

    これをもとに TA が実際にテストします.  実行する際のスクリプト, データの置き場を明示すること.

  • 実行結果 result2.txt ページへのリンク

    実行例とは, スクリプトの作業記録です. 自分が実際にスクリプトを実行したときのコンソールをテキストファイル result_2.txt にコピーしてください.

  • 参考資料

    URL をベタ書きにするのではなく, そのページの作者やタイトル, および何を参考にしたのかも明記する.

  • 共同作業した人の名前
  • 工夫したこと, 感想など

実行結果の例

$ ./quiz2.sh 
県名を入力してください
HYOGOKEN
市町村名を入力してください
SAKAISHI
名前が一致しません
県名を入力してください
HYOGOKEN
市町村名を入力してください
KOBESHINADAKU
光害指数は
6829
100km 以内にある光害指数が低い場所は
92.8318 OKAYAMAKEN&NISHIAWAKURASON
140.003 HYOGOKEN&SAYOCHO
140.586 NARAKEN&TOTSUKAWAMURA