32;278;0c 最低限 Unix / Linux [II] 【6. 本日の課題】

最低限 Unix / Linux [II] 【6. 本日の課題】

  1. 事前準備
  1. シェル
  1. テキストエディタ
  1. シェルスクリプト
  1. [付録] データ圧縮・解凍とアーカイブ
  1. 本日の課題
  1. [付録] gnuplotについて
  1. [付録] 位置天文学とプラネタリウム
情報実験第 3 回トップへ

本日の課題:シェルスクリプトの作成

本日の実習の内容+αを用いて,多数のファイルを一気に分別するためのシェルスクリプトを作成しましょう.本課題では恒星の位置と明るさのデータが書かれているファイルを用いることにします.

課題背景

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

これら 909 個のデータファイルたちはアーカイブファイル (star.tar.gz) としてまとめられています.

皆さんには,このアーカイブファイルを取得・解凍し,得られた 909 個のデータファイル群を恒星の明るさ毎に分別して以下のものを作ってもらいます.

  1. 恒星が何等星であるかに応じて作ったディレクトリ(4つ).各ディレクトリには,明るさ毎に分別されたデータファイルたちが格納されている.
  2. 上記 1. のディレクトリに格納されたデータのまとめファイル(4つ).
  3. 特定の領域(後述)内の恒星について,恒星が何等星であるかに応じて作ったディレクトリ(4つ).各ディレクトリには,明るさ毎に分別されたデータファイルたちが格納されている.
  4. 上記 3. のディレクトリに格納されたデータのまとめファイル(領域まとめファイル,4つ).
  5. 上記 4. の領域まとめファイルから描画した星の地図 (out.pdf).
以上の作業は単一のシェルスクリプトで行ってください.恒星を 1 等星から 4 等星まで分別することで,プラネタリウム作成時にどの恒星をどのような大きさの孔で表現すればよいかがわかります.また,M 君がよく知っている星空の領域でも恒星の分別・星の地図作成を行い,実際の星空と比較すれば,M 君は明るさ毎の分別がきちんと行われていることをチェックすることができるでしょう.

設問

本課題は 2 つの設問からなる.

【設問 A:恒星データの分別と星の地図の作成】

以下の仕様要求を満たすシェルスクリプト astraea.sh を作製せよ.このスクリプトはホームディレクトリ直下に配置し,実行権限を与えておくこと.

  1. 自分のホームディレクトリ直下に作業ディレクトリ(名前はskyにすること)を作成する.以後,この作業ディレクトリ以下にダウンロードしたファイルや作業成果を格納する.

  2. 恒星のデータファイルがまとめられたアーカイブファイル star.tar.gz をダウンロード・解凍する.アーカイブファイルの URL は以下である:

    ダウンロードするコマンドは以下のとおりである.
    wget http://www.ep.sci.hokudai.ac.jp/~inex/y2018/0427/practical/kadaidata/star.tar.gz

  3. 恒星が何等星であるかという基準に応じてディレクトリを作成する.ディレクトリの名前は,L等星について HIPL(L = 1 ~ 4)とし, sky ディレクトリ直下に配置する.続いて,明るさ毎にデータファイルの分別を行う.恒星が何等級かを判別し,L等星の恒星のデータファイルを HIPL の中に格納せよ.

    さらに,恒星データを等級別にまとめたファイルを 4 つ作成する.これらを「まとめファイル」と呼ぶことにする.このまとめファイルの名前は,L等星 (L = 1~4) のものについて HIPL.csv とする.4 つのまとめファイルはすべて,sky ディレクトリ直下に配置する.まとめファイルの中身は,分別後の恒星データを行ごとに列挙したものとし,HIP 番号が昇順に並ぶようにすること.例として,3 等星のまとめファイル (HIP3.csv) の中身を表示させると,次のようになる:
    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
    ・・・
    上記の例では,等級(第4列目)はすべて 2.5 以上 3.5 未満となっており,3 等星が正しく分別されている.

  4. 各情報実験機ごとに異なる領域の星の地図を作る.領域の割り振りは以下の通りとする.それぞれの領域には必ず 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 の値によっては,該当する恒星が担当領域内に一つも存在しない場合がある.注意せよ.

  5. gnuplot というソフトウェアを用いて,恒星データの領域まとめファイル regionX_HIPL.csv から星の地図 (out.pdf) を作成する.gnuplot についての詳細は付録を参照のこと.星の地図を作成するために,今回は gnuplot の描画動作を指定・記述したファイル(gnuplot バッチファイル)を gnuplot に読み込ませることにする.まず,領域 X の星の地図を作成する gnuplot バッチファイルを取得せよ.そのためのコマンドは以下の通りである.
    wget http://www.ep.sci.hokudai.ac.jp/~inex/y2018/0427/practical/kadaidata/plotX.gpl
    gnuplot バッチファイル (plotX.gpl,X = A ~ C) は sky ディレクトリ直下に配置すること.星の地図を作成するには,gnuplot バッチファイルの配置後に,sky ディレクトリをカレントディレクトリとしてシェルスクリプト内で以下のコマンドを実行する.
    gnuplot plotX.gpl
    このコマンドを実行することで,out.pdf という星の地図が出力される.out.pdf は最終的に sky ディレクトリ直下に配置されているようにすること.

  6. 作成した星の地図 (out.pdf) を画面に表示する.表示には firefox を用いる.表示させるにはシェルスクリプト内で以下のコマンドを実行する.
    firefox out.pdf

シェルスクリプトの実行によって生成されるディレクトリ・ファイルの配置を以下にまとめる.

Fig. 1 シェルスクリプト実行後のディレクトリ・ファイルの配置.緑の網掛けはディレクトリを表す.

【設問 B:星空散歩】

星の地図 (out.pdf) に表示される星座と最も明るい恒星の固有名を答えよ.作成した領域まとめファイルやインターネット等も参考にすると良い.回答に当たっては,どのような情報をもとにどのような調査をしたのかも答えること.その他,星の地図や領域まとめファイルを眺めて,気付いたことや特筆すべきこと(他にどんな恒星があるか?など)があれば,述べること.

提出内容

以下のものを suu に投稿せよ.その際, それぞれ対応するタグを用いること.

  1. シェルスクリプト(タグ : [2018] 3-1. シェルスクリプト本文)
  2. 課題に関するコメント (タグ : [2018] 3-2. 課題に関するコメント)

注意点

困ったときは

ヒント

作問者からの伝言

夜遅くまで情報実験室に残って頑張っている夜更かしな人たちは,気晴らしに外へ出て空を眺めてみるといいでしょう.今時期ならば,深夜 0 時以降の時間帯に東の空に目を向けると,課題で描こうとしている星空の本物が見えますよ.




<< 戻る (データ圧縮・解凍とアーカイブ)      次へ >> (付録:gnuplotについて)      情報実験 第 3 回 のトップへ >>

最終更新日: 2018/04/24 松岡 亮 copyright © 2018 inex