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

提出について

レポートの作成方法

  • 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 号室にいる人に一言断ってから使用してください. [Exp2017]実習部屋(507号室)の使い方 もよく読んでください.

レポートの提出方法

ファイルを置く

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

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

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

アップロード確認

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

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

になります.

提出完了の報告

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

  • メールの内容
    • 件名
      • 「ITPASS実習レポート ??/?? 出題分 (自分の氏名)」
    • 宛先
      • itpass のメーリングリスト
    • メール本文に必ず記入すること
      • 情報実験機番号
      • 氏名
      • レポートの 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 ファイルごとに気象データの順番が異なるので注意してください.

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

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

注意点
  • csv ファイルごとに気象データの順番が異なります. 気象データがどのような順番で並んでいても, それに関わらず必要な情報のみを使えるようなスクリプトにしてください.
  • 複数の年で最初に夏日が来た月日が同じである場合は, その日の平均気温が高い順に順位付けしてください. 気象データと同様, 同じになったのがどの年であっても, 正しく並び変えられるスクリプトにしてください. ただし, 平均気温を表示させる必要はありません.
事前準備

スクリプトを作成する前に, 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 が実際にテストします.  実行する際のスクリプト, データの置き場を明示すること.

  • 実行例 result_1.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 都道府県の市町村名, 緯度経度座標, 光害指数のデータが入ったデータファイルを用いて, ある都道府県名と市町村名を入力すると, その場所での光害指数と, そこから半径 100km 以内で光害指数が最も低い方から 3 箇所の市町村名とそこでの光害指数を表示するシェルスクリプトを作成してください.

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

注意点

データファイルには以下のようにデータが記述されています.

事前準備

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

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

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

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

cd ~hoge                                                       
scp  ./kadai2_data.dat hoge@10.35.19.??:~         

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

ヒント
  • 市町村間の距離を計算するときには以下の式を用いてください.

    緯度経度の変化(秒単位)を Δφ, Δλ を求めたときに

    南北方向への移動距離 x=30.82×Δφ(m)

    東西方向への移動距離 y=25.11×Δλ(m)

    とすると,

    2 点間の距離 L は

    L=(x^2+y^2)^0.5

    (実際は球面上の 2 点間の距離は球面の効果を考慮して計算しなければならないが今回は簡単化のため上式を用いる. (北緯 36 度付近での近似式))

  • シェルスクリプト内の計算で小数を扱う際は bc コマンドを用いてください. 例えば, 変数 num に x^2+y^2 の平方根をとった値を代入するときには num = `echo "sqrt x^2+y^2 " | bc -l`
レポートに書く内容

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

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

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

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

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

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

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

  • 参考資料

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

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

実行結果の例

$ ./quiz2.sh 
県名を入力してください
HYOGOKEN
市町村名を入力してください
KOBESHINADAKU
光害指数は
6829
100km 以内にある光害指数が低い場所は
92.8318 OKAYAMAKEN&NISHIAWAKURASON
140.003 HYOGOKEN&SAYOCHO
140.586 NARAKEN&TOTSUKAWAMURA
Last modified:2018/07/16 10:12:59
Keyword(s):
References:[[Exp2018]スケジュール表・各回資料]