本日の課題:シェルスクリプトの作成
本日の実習の内容+αを用いて,多数のファイルを一気に分別するためのシェルスクリプトを作成しましょう.本課題では恒星の位置と明るさのデータが書かれているファイルを用いることにします.
課題背景
N 高校物理部の M 君は,ヒッパルコス衛星による恒星データを使ってプラネタリウムを作成しようとしています.彼は,孔に光を通すことで生じる光点をドームに投影することで,星を再現しようと考えました.そのためには,星の明るさ毎に直径が異なる孔を投影機に開けなければならず,恒星データを明るさ毎に分別する必要があります.しかし,まさに星の数ほどあるデータファイルたち(今回は 909 個)を分別するのはとても大変です.そこで,あなたのシェルスクリプト技術で恒星データを明るさ毎に分別し,M 君を助けてあげてください.また,分別が正しく行われていることを確認するために,M 君がよく知っている星座の領域で,明るさ毎に点の大きさを変えた星の地図も作ってあげましょう!
課題概要
本課題で用いるのは,恒星データが記された 909 個のデータファイルです.全てのデータファイルは HIPXXXX.csv (XXXX は 6 桁以下の数字) という形式の名前を持っています.HIPXXXX は恒星の名前であり,一つのデータファイルが一つの恒星の情報に対応しています.例えば,HIP1067.csv というデータファイルには,HIP1067 と名づけられた恒星の情報が書き込まれています.データファイルの中身はカンマで区切られた文字列や値から成り,1つのデータファイルには1行のみデータが書かれています.その 1 行には,左から,HIP番号,赤経,赤緯,等級が書かれています.例えば,HIP1067.csv の中身は次の通りになります:
HIP1067,3.30895830,15.18361583,2.83 |
- HIP番号は,ヒッパルコス衛星によるカタログ(ヒッパルコス星表)でつけられた恒星の名前です.ヒッパルコス星表は良く用いられるカタログなので,HIPXXXX(XXXXは数字)とインターネットで検索すると,その恒星の情報がヒットします(e.g. HIP27989を検索した例.これは有名な恒星です.果たして何でしょうか?).
- 赤経・赤緯は,天球上での星の位置の座標を表すものです.
- 等級とは恒星の明るさのことで,数字が小さくなるほど明るくなります.等級が 1.5 未満の恒星を1等星,1.5 以上 2.5 未満の星を 2 等星,2.5 以上 3.5 未満の星を 3 等星… と呼びます.課題でも「この恒星は〜等星である」ということを判別してもらいます.
これら 909 個のデータファイルたちはアーカイブファイル (star.tar.gz) としてまとめられています.
皆さんには,このアーカイブファイルを取得・解凍し,得られた 909 個のデータファイル群を恒星の明るさ毎に分別して以下のものを作ってもらいます.
- 恒星が何等星であるかに応じて作ったディレクトリ(4つ).各ディレクトリには,明るさ毎に分別されたデータファイルたちが格納されている.
- 上記 1. のディレクトリに格納されたデータのまとめファイル(4つ).
- 特定の領域(後述)内の恒星について,恒星が何等星であるかに応じて作ったディレクトリ(4つ).各ディレクトリには,明るさ毎に分別されたデータファイルたちが格納されている.
- 上記 3. のディレクトリに格納されたデータのまとめファイル(領域まとめファイル,4つ).
- 上記 4. の領域まとめファイルから描画した星の地図 (out.pdf).
設問
本課題は 2 つの設問からなる.【設問 A:恒星データの分別と星の地図の作成】
以下の仕様要求を満たすシェルスクリプト astraea.sh を作製せよ.このスクリプトはホームディレクトリ直下に配置し,実行権限を与えておくこと.
自分のホームディレクトリ直下に作業ディレクトリ(名前はskyにすること)を作成する.以後,この作業ディレクトリ以下にダウンロードしたファイルや作業成果を格納する.
恒星のデータファイルがまとめられたアーカイブファイル star.tar.gz をダウンロード・解凍する.アーカイブファイルの URL は以下である:
ダウンロードするコマンドは以下のとおりである.wget http://www.ep.sci.hokudai.ac.jp/~inex/y2018/0427/practical/kadaidata/star.tar.gz
恒星が何等星であるかという基準に応じてディレクトリを作成する.ディレクトリの名前は,L等星について HIPL(L = 1 ~ 4)とし, sky ディレクトリ直下に配置する.続いて,明るさ毎にデータファイルの分別を行う.恒星が何等級かを判別し,L等星の恒星のデータファイルを HIPL の中に格納せよ.
さらに,恒星データを等級別にまとめたファイルを 4 つ作成する.これらを「まとめファイル」と呼ぶことにする.このまとめファイルの名前は,L等星 (L = 1~4) のものについて HIPL.csv とする.4 つのまとめファイルはすべて,sky ディレクトリ直下に配置する.まとめファイルの中身は,分別後の恒星データを行ごとに列挙したものとし,HIP 番号が昇順に並ぶようにすること.例として,3 等星のまとめファイル (HIP3.csv) の中身を表示させると,次のようになる:
上記の例では,等級(第4列目)はすべて 2.5 以上 3.5 未満となっており,3 等星が正しく分別されている.HIP1067,3.30895830,15.18361583,2.83
HIP2021,6.41334165,-76.74496500,2.82
HIP3092,9.83165580,30.86122583,3.27
HIP3821,12.27125250,57.81654777,3.46
HIP5165,16.52127705,-45.28150945,3.32
HIP5364,17.14693200,-9.81807195,3.46
HIP6686,21.45251250,60.23540333,2.66
HIP6867,22.09142370,-42.68227084,3.41
HIP8102,26.02136445,-14.06044417,3.49
HIP8796,28.27041570,29.57939722,3.42
・・・各情報実験機ごとに異なる領域の星の地図を作る.領域の割り振りは以下の通りとする.それぞれの領域には必ず 1 つの 1 等星が含まれている.
joho 01 02 04 05 07 : 領域A 赤経 285.0~307.5度, 赤緯 -10~+15度 joho 08 10 11 13 14 : 領域B 赤経 277.5~287.5度, 赤緯 +30~+40度 joho 16 17 19 20 22 23: 領域C 赤経 280.0~330.0度, 赤緯 +25~+60度
それぞれの担当領域で,恒星が何等星であるかという基準に応じてディレクトリを作成する.ディレクトリの名前は,領域 X の L 等星について regionX_HIPL(X = A ~ C, L = 1 ~ 4)とし,sky ディレクトリ直下に配置する.続いて,領域内の恒星について明るさ毎にデータファイルの分別を行う.恒星が何等級かを判別し,領域 X 内の L 等星の恒星のデータファイルを regionX_HIPL ディレクトリの中に格納せよ.
さらに,3. の場合と同様,領域内の恒星について,恒星データを等級別にまとめたファイルを 4 つ作成する.これらを「領域まとめファイル」と呼ぶことにする.この領域まとめファイルの名前は,領域 X の L 等星のものについて regionX_HIPL.csv とする.4 つの領域まとめファイルはすべて,sky ディレクトリ直下に配置する.領域まとめファイルの中身は,分別後の恒星データを行ごとに列挙したものとし,HIP 番号が昇順に並ぶようにすること.ただし,指定した L の値によっては,該当する恒星が担当領域内に一つも存在しない場合がある.注意せよ.
gnuplot というソフトウェアを用いて,恒星データの領域まとめファイル regionX_HIPL.csv から星の地図 (out.pdf) を作成する.gnuplot についての詳細は付録を参照のこと.星の地図を作成するために,今回は gnuplot の描画動作を指定・記述したファイル(gnuplot バッチファイル)を gnuplot に読み込ませることにする.まず,領域 X の星の地図を作成する gnuplot バッチファイルを取得せよ.そのためのコマンドは以下の通りである.
gnuplot バッチファイル (plotX.gpl,X = A ~ C) は sky ディレクトリ直下に配置すること.星の地図を作成するには,gnuplot バッチファイルの配置後に,sky ディレクトリをカレントディレクトリとしてシェルスクリプト内で以下のコマンドを実行する.wget http://www.ep.sci.hokudai.ac.jp/~inex/y2018/0427/practical/kadaidata/plotX.gpl
このコマンドを実行することで,out.pdf という星の地図が出力される.out.pdf は最終的に sky ディレクトリ直下に配置されているようにすること.gnuplot plotX.gpl
作成した星の地図 (out.pdf) を画面に表示する.表示には firefox を用いる.表示させるにはシェルスクリプト内で以下のコマンドを実行する.
firefox out.pdf
シェルスクリプトの実行によって生成されるディレクトリ・ファイルの配置を以下にまとめる.

【設問 B:星空散歩】
星の地図 (out.pdf) に表示される星座と最も明るい恒星の固有名を答えよ.作成した領域まとめファイルやインターネット等も参考にすると良い.回答に当たっては,どのような情報をもとにどのような調査をしたのかも答えること.その他,星の地図や領域まとめファイルを眺めて,気付いたことや特筆すべきこと(他にどんな恒星があるか?など)があれば,述べること.
提出内容
以下のものを suu に投稿せよ.その際, それぞれ対応するタグを用いること.
- シェルスクリプト(タグ : [2018] 3-1. シェルスクリプト本文)
- 作成したシェルスクリプト astraea.sh の全文
- 課題に関するコメント (タグ : [2018] 3-2. 課題に関するコメント)
- 設問 B の解答
- シェルスクリプト作成に当たって,工夫,または苦労した点.
- 作業協力者がいればその名前, 参考文献(人のレポートを参考にした場合もしっかり挙げること).
- もし他に言いたいことがあれば記述しても良い.
- 「ファイルアップロード」から以下のファイルをアップロードし,このタグのレポートにリンクを貼ってください.
- シェルスクリプトファイル(astraea.sh)
- シェルスクリプト実行後の作業ディレクトリを圧縮したもの(sky.tar.gz)
注意点
- 情報実験機で作業する場合には本日の事前準備を参考に X window system を立ち上げましょう.
困ったときは
- わからないことがあったらまずは文献(過去のレポート含む)あるいはインターネット上の検索エンジンを利用しましょう.
- やっぱりわからないときは友達と相談しましょう.
- どうしてもわからないときは情報実験メーリングリスト inex-2018 を活用しましょう. 同じような疑問を持っている人の助けになるかもしれません.
- もちろん直接 TA・VTA をつかまえてもけっこうです(8 号館二階にいると思います).
ヒント
- やり方は一通りではありません. どうすれば一番楽か作業の順序立てを最初に考えましょう.
- コマンドの使い方が分からなくなったら man で調べましょう!
- 沢山のファイルに同じ処理を施すには, メタキャラクタや ループ処理が便利.
- パイプを活用して 複数のコマンドを組み合わせてみましょう.
- 一つのコマンドでも コマンドラインオプション によって様々な機能を発揮します. man やインターネットで いろいろ調べてみるべし.
- 小数の処理で便利なコマンドに bc というものがあります.インターネットで調べてみましょう.
- cat, grep, sed, awk等のよく使われる便利なコマンドを調べてみよう!
- ヒントに囚われず, 自由な発想をしよう!!
作問者からの伝言
夜遅くまで情報実験室に残って頑張っている夜更かしな人たちは,気晴らしに外へ出て空を眺めてみるといいでしょう.今時期ならば,深夜 0 時以降の時間帯に東の空に目を向けると,課題で描こうとしている星空の本物が見えますよ.
<< 戻る (データ圧縮・解凍とアーカイブ) 次へ >> (付録:gnuplotについて) 情報実験 第 3 回 のトップへ >>