本日の課題:シェルスクリプトの作成
本日の実習の内容+αを用いて,多数のファイルを一気に処理するためのシェルスクリプトを2つ作成しましょう.本課題では恒星や白色矮星のデータが書かれているファイルを用いることにします.
課題背景
惑星宇宙グループの M 君は,指導教員の K 先生から星のデータを渡され,それを使って HR 図(ヘルツシュプルング・ラッセル図; たとえば,地球惑星科学入門第2版・p368)を作るように頼まれました.K 先生によると,星の種類ごとに色を分けてデータ点を打ってほしいとのことでした.ただし,そのためには,グラフ作成用にデータを整形し,さらに星の種類ごとにデータを分別する必要があります.一方で,まさに星の数ほどあるデータファイルたち(今回は 1345 個)を手作業で処理するのはとても大変です.そこで,あなたのシェルスクリプト技術で星のデータを整形・分別し,M 君を助けてあげてください.
データの概要
本課題で用いるのは,恒星と白色矮星(以後,「星」と呼ぶ)のデータが記された 1345 個のデータファイルで,これらはアーカイブファイル (star2019.tar.gz) にまとめられた状態で配布されます.全てのデータファイルは HIPXXXX.dat (XXXX は 6 桁以下の数字) という形式の名前を持っています.HIPXXXX は星の名前であり,一つのデータファイルが一つの星の情報に対応しています.例えば,HIP91262.dat というデータファイルには,HIP91262 と名づけられた星の情報が書き込まれています.データファイルの中身は8行の文字列や値から成り,上の行から,HIP番号,赤経,赤緯,視等級,星の種類(GS:巨星,MS:主系列星,WD:白色矮星 のいずれか),距離,絶対等級,B-V色指数が書かれています.例えば,HIP91262.dat の中身は次の通りになります:
HIP91262 279.2341083 38.78299311 0.03 MS 25.28503839 0.58 -0.001 |
データの詳細な意味を理解する必要はありませんが,気になる人は,下の「今回用いたデータについて」を参照したり調べたりしましょう.今回 HR 図を作成するにあたって,これらのデータから横軸をB-V色指数,縦軸を絶対等級にとって作成します.また,星の種類ごとに点の色分けをします.
設問A(データの整形)
M くんは,データファイルをグラフ化しやすくするために,ファイル内の8行のデータを整形し,データを1行にまとめた新たなデータファイルを作ろうと考えました.以下の要請を満たす,新しいデータファイルを作るためのシェルスクリプト(ouranos1.sh)を作成してください.
- 作業ディレクトリ "work" を作成し,データファイルが格納されているアーカイブファイルを "work" 内でダウンロード・解凍する.アーカイブファイルの URL は以下である:
ダウンロードするには以下をスクリプト内で実行するようにすればよい.
wget http://www.ep.sci.hokudai.ac.jp/~inex/y2019/0426/practical/kadaidata/star2019.tar.gz - 「反復構造」を用いるなどして,各データファイルに対して8行のデータをシェル変数として読み込み,それらを1行にまとめてファイルへ出力することで新たなデータファイルを作る.
- このとき,整形後のデータはカンマ(,)で区切り,1列目からHIP番号,赤経,赤緯,視等級,星の種類,距離,絶対等級,B-V色指数とする.
- HIPXXXX.datのデータを整形して生成した新たなデータファイルの名前は,HIPXXXX.csv とし,"work" 直下に配置する.
設問B(データの分別と作図)
K 先生の要請は,HR 図で星の種類別に色を変えてプロットするというものでした.そこで M くんは,先ほどのデータ整形に加えて星の種類ごとにデータファイルを分別し,HR 図を描画するシェルスクリプトを作ろうと考えました.以下の要請を満たすように,データファイルを分別する機能と HR 図を作成する機能を持つ新しいシェルスクリプト(ouranos2.sh)を作成してください.
- 星の種類に対応したディレクトリ "GS" "MS" "WD" を "work" の直下に作成し,「選択構造」を用いるなどして星の種類ごとに整形済みデータファイル (HIPXXXX.csv) を分別して格納する.
- ディレクトリ "GS" "MS" "WD" に対して,その中の星のデータをまとめたファイル(まとめファイル)を作る.
- 「まとめファイル」は,ディレクトリ内の整形済みデータファイル (HIPXXXX.csv) を結合したものとする.すなわち,各行は単一の星に関するデータから成り,1 列目からHIP番号,赤経,赤緯,視等級,光度階級,距離,絶対等級,B-V色指数を記したものとなる.「まとめファイル」内の行の順番(星の並び順)は問わない.
- 「まとめファイル」の名前は,星の種類ごとに "GS.csv" "MS.csv" "WD.csv" とし,"work" 直下へ配置する.
- HR.gpl という描画スクリプトを用いて,3 つのまとめファイルから HR 図 (HR.pdf) を作成せよ.この HR.gpl はグラフ描画ソフトウェア gnuplot(詳細は付録を参照のこと)の描画動作を記述したファイルである.まず,HR.gpl を取得するためにスクリプト内に以下を記述する.
HR 図 (HR.pdf) を作成するには,HR.gpl を "work" 直下に配置し,そこをカレントディレクトリとしてスクリプト内で以下のコマンドを実行する.wget http://www.ep.sci.hokudai.ac.jp/~inex/y2019/0426/practical/kadaidata/HR.gpl gnuplot HR.gpl -
作成した HR 図 (HR.pdf) を firefox を用いることで画面に表示せよ.そのためには,スクリプト内で以下のコマンドを記述する.
分別が成功していれば,3色の点群が表示されているはずである.なお,HR.pdf は最終的に "work" の直下に配置されているようにすること.firefox HR.pdf
設問C(HR 図の観察)
作成した HR 図は星の種類ごとに色分けされている.HR 図上でどの種類の星がどこにプロットされているかを確認し,星の種類ごとの分布の特徴を述べよ.作成したまとめファイルやインターネット等を参考にすると良い.回答に当たっては,どのような情報をもとにどのような調査をしたのかも答えること.その他,HR 図やまとめファイルを眺めて,気付いたことや特筆すべきことがあれば,述べること.
提出内容
以下のものを suu に投稿せよ.その際, それぞれ対応するタグを用いること.
- シェルスクリプト(タグ : [2019] 3-1. シェルスクリプト本文)
- 作成した2つのシェルスクリプト ouranos1.sh, ouranos2.sh の全文
- 課題に関するコメント (タグ : [2019] 3-2. 課題に関するコメント)
- 設問Cの回答.
- シェルスクリプト作成に当たって,工夫,または苦労した点.
- 作業協力者がいればその名前, 参考文献(ほかの人のレポートを参考にした場合もしっかり挙げること).
- もし他に言いたいことがあれば記述しても良い.
- 「ファイルアップロード」から以下のファイルをアップロードし,このタグのレポートにリンクを貼ること.
- シェルスクリプトファイル(ouranos1.sh, ouranos2.sh)
- シェルスクリプト実行後の作業ディレクトリを圧縮したもの(work.tar.gz)
今回用いたデータについて
今回用いたデータは,ヒッパルコス衛星(詳細はこちら)によるカタログ(ヒッパルコス星表)から,距離が 100 光年以内で,かつ星の種類が良くわかっているものを選び抜いたものです.以下に,データの各部分についての簡単な説明をまとめておきます.
- HIP番号は,ヒッパルコス星表でつけられた星の名前です.ヒッパルコス星表は良く用いられるカタログなので,HIPXXXX(XXXXは数字)とインターネットで検索すると,その星の情報がヒットします(e.g. HIP91262を検索した例.これは有名な恒星です.果たして何でしょうか?).
- 赤経・赤緯は,天球上での星の位置の座標を表すものです.
- 視等級とは地球から見た星の明るさのことです.視等級の大きさは,星までの距離と絶対等級(後述)に依存します.
- 星の種類の欄には,GS:巨星,MS:主系列星,WD:白色矮星のいずれかが記されています.今回は簡単のために,準巨星・輝巨星を巨星として,準矮星を主系列星として扱いました.
- 距離は,光年を単位としています.今回は太陽系から100光年以内にある恒星を扱うことにしています.
- 絶対等級とは,10 pc(≒32.6光年)離れたところから見た星の明るさのことです.距離をそろえて観察した場合の星の明るさなので,これは星から放出されているエネルギーの大きさを表す指標となります.HR 図の縦軸のデータとして使います.
- B-V色指数とは,星の色を表す数値の一つで,星の色が赤っぽいほど値が小さく,青っぽいほど値が大きくなります.HR 図の横軸のデータとして使います.
注意点
- 情報実験機で作業する場合には本日の事前準備を参考に X window system を立ち上げましょう.
困ったときは
- わからないことがあったらまずは文献(過去のレポート含む)あるいはインターネット上の検索エンジンを利用しましょう.
- やっぱりわからないときは友達と相談しましょう.
- どうしてもわからないときは情報実験メーリングリスト inex-2019 を活用しましょう. 同じような疑問を持っている人の助けになるかもしれません.
ヒント
- やり方は一通りではありません. どうすれば一番楽か作業の順序立てを最初に考えましょう.
- コマンドの使い方が分からなくなったら man で調べましょう!
- 沢山のファイルに同じ処理を施すには, メタキャラクタや ループ処理が便利.
- パイプを活用して 複数のコマンドを組み合わせてみましょう.
- 一つのコマンドでも コマンドラインオプション によって様々な機能を発揮します. man やインターネットで いろいろ調べてみるべし.
- cat, grep, sed, awk等のよく使われる便利なコマンドを調べてみよう!
- ヒントに囚われず, 自由な発想をしよう!!
<< 戻る (データ圧縮・解凍とアーカイブ) 次へ >> (付録:gnuplotについて) 情報実験 第 3 回 のトップへ >>