本日の課題:シェルスクリプトの作成
本日の実習の内容+αを用いて,多数のファイルを一気に処理するためのシェルスクリプトを3つ作成しましょう.本課題では恒星のデータが書かれているファイルを用いることにします.なおシェルスクリプトは, 全て自分のホームディレクトリで動かすことを前提にして作成してください.
単位取得には以下の課題A,B,C全ての提出が必要です.皆さんがんばってください.
課題背景
惑星宇宙グループの N さんは, 恒星GJ436のスペクトルについて勉強をしようとしています. GJ436 は、赤色矮星に分類される恒星で、系外惑星を持つことが知られています(詳しくは付録を参照). N さんは指導教員の K 先生から, スペクトルとは, 光や電磁波を分解して成分ごとの強度を波長の順に並べたものであることを教わりました. そして宿題として, K 先生からGJ436のデータを渡され, それを使ってスペクトル図を描いてくるようにと言われました. そのためには, 図の作成用に大量のデータを整形する必要があります. このデータを一つ一つ処理していくのはとても大変です. そこで皆さんのシェルスクリプト技術でデータを整形し, N さんを助けてあげましょう.
データの説明
本課題で用いるのは, 恒星GJ436のスペクトルデータが記された95個のデータファイルで, これらはアーカイブファイル(GJ436_spectra_data.tar.gz)にまとめられた状態で配布されます. 全てのデータファイルは XXnm_YYnm.csv という名前を持っており (XXとYYは連続する整数であり, 例えば XX=25, YY=26で 25nm_26nm.csv), それぞれXXnmからYYnmまでの波長に対応するデータが格納されています. これらのデータファイルはcsv形式であり, 1列目には波長, 2列目にはエネルギー流束密度が書かれています. 例えば, 10nm_11nm.csv の冒頭10行は次のようになります:
100.1, 0.004020685 100.2, 0.001447438 100.3, 0.003063374 100.4, 0.001164931 100.5, 0.011384134 100.6, error 100.7, 3.8530088 100.8, 0.00143054 100.9, 1.4955468 |
ただし, 各データファイルにはエラーの行(XXXX, error)が含まれている場合があることに注意してください. データ内の波長の単位はオングストローム(Ang), エネルギー流束密度の単位はerg/cm2/s/Ang です.
課題A
N さんはまず, 95個のファイルを全て結合して, 100angから1050ang(10nmから105nm)まで波長順にデータがまとめられた1つのファイルを作ろうと考えました. 以下の要件を満たした, ファイルを作るためのシェルスクリプト(kadaiA.sh)を作成してください.
- 自分のホームディレクトリ直下に, 作業ディレクトリ "work" を作成し,データファイルが格納されているアーカイブファイルを "work" 内でダウンロード・解凍する.アーカイブファイルの URL は以下である:
ダウンロードするには以下をスクリプト内で実行するようにすればよい.
wget http://www.ep.sci.hokudai.ac.jp/~inex/y2022/0513/practical/kadaidata/GJ436_spectra_data.tar.gz - 10nm_11nm.csv から 104nm_105nm.csv までの全てのファイルを波長順に結合し,100angから1050angまでの波長, エネルギー流束密度が記された新たなファイルGJ436_spectraA.csvを作成せよ.
- 課題Aでは,データの単位を変えたり, エラーの行を削除したりする必要はない. 単純に全てのファイルを繋ぎ合わせる機能を持つスクリプトを作ること.
- GJ436_spectraA.csvは"work"直下に配置すること.
課題B
N さんは作成されたGJ436_spectraA.csvを見て, 所々にエラーの行があることに気づきました.このままではスペクトルのグラフを作ることができません. 以下の要件を満たすように, エラーの行を削除する機能を持つ新しいシェルスクリプト(kadaiB.sh)を作成してください.
- GJ436_spectraA.csv から,「XXXX, error」となっているエラー行をすべて取り除いたファイルGJ436b_spectraB.csv を作成せよ.
- GJ436_spectraB.csvは"work"直下に配置すること.
課題C
いよいよ N さんはスペクトルのグラフを作成しようとしています. しかし N さんは波長の単位をナノメートルにしてグラフを作成したがっているので, 最後の仕上げとして波長の単位を変換してあげる必要があります. 以下の要件を満たすように, 単位を変換する機能とスペクトルのグラフを作成する機能を持つ新しいシェルスクリプト(kadaiC.sh)を作成してください.
- GJ436_spectraB.csv に書かれている1列目の全ての波長の単位をオングストローム(Ang)からナノメートル(nm)へ変換したファイルGJ436_spectraC.csvを作成せよ.
- GJ436_spectraC.csvは"work"直下に配置すること.
- 単位を変える際は, 1列目の波長のみ変えればよい. 2列目の単位にもAngが含まれているが, そこは変えなくてよい.
- spectra.gpl という描画スクリプトを用いて,GJ436_spectraC.csvから スペクトル図 (spectra.pdf) を作成せよ.この spectra.gpl はグラフ描画ソフトウェア gnuplot(詳細は付録を参照のこと)の描画動作を記述したファイルである.まず,spectra.gpl を取得するためにスクリプト内に以下を記述する.
スペクトル図 (spectra.pdf) を作成するには,spectra.gpl を "work" 直下に配置し,そこをカレントディレクトリとしてスクリプト内で以下のコマンドを実行する.wget http://www.ep.sci.hokudai.ac.jp/~inex/y2022/0513/practical/kadaidata/spectra.gpl gnuplot spectra.gpl -
作成した スペクトル図 (spectra.pdf) を firefox を用いることで画面に表示せよ.そのためには,スクリプト内で以下のコマンドを記述する.
分別が成功していれば,以下のような図が表示されるはずである.なお,spectra.pdf は最終的に "work" の直下に配置されているようにすること.firefox spectra.pdf

提出内容
以下のものを提出せよ.〆切: 2022年5月25日 12:00
- Moodleに提出するもの
- シェルスクリプト本文
- 作成した3つのシェルスクリプト kadaiA.sh, kadaiB.sh, kadaiC.sh の全文
- フォーラム名 "課題A, 課題B, 課題C"
- 課題に関するコメント
- シェルスクリプト作成に当たって,工夫,または苦労した点.
- 作業協力者がいればその名前, 参考文献(ほかの人のレポートを参考にした場合もしっかり挙げること).
- もし他に言いたいことがあれば記述しても良い.
- フォーラム名 "課題に関するコメント"
- 情報実験機上で提出するもの
- 各自のホームディレクトリにkadaiA.sh, kadaiB.sh, kadaiC.shを残しておくこと.
- スクリプトを実行して作成されるworkディレクトリと各csvファイル, pdfを残しておくこと.
- 情報実験機で作業する場合には本日の事前準備を参考に X window system を立ち上げましょう.
- わからないことがあったらまずは文献(過去のレポート含む)あるいはインターネット上の検索エンジンを利用しましょう.
- やっぱりわからないときは友達と相談しましょう.
- どうしてもわからないときは情報実験メーリングリスト inex-2022 を活用しましょう. 同じような疑問を持っている人の助けになるかもしれません.
- やり方は一通りではありません. どうすれば一番楽か作業の順序立てを最初に考えましょう.
- コマンドの使い方が分からなくなったら man で調べましょう!
- 沢山のファイルに同じ処理を施すには, メタキャラクタや ループ処理が便利.
- パイプを活用して 複数のコマンドを組み合わせてみましょう.
- 一つのコマンドでも コマンドラインオプション によって様々な機能を発揮します. man やインターネットで いろいろ調べてみるべし.
- cat, grep, sed, awk, bc等のよく使われる便利なコマンドを調べてみよう!
- ヒントに囚われず, 自由な発想をしよう!!
注意点
困ったときは
ヒント
<< 戻る (データ圧縮・解凍とアーカイブ) 次へ >> (付録:gnuplotについて) 情報実験 第 3 回 のトップへ >>