本日の課題
本日は必須課題と応用課題が存在します.
必須課題は単位取得のために必須となりますので必ず回答してください.
応用課題は単位取得のために必須とはなりませんが, 回答すると成績評価があがる可能性があります.
本日の必須課題
本日の必須課題はテキストエディタを使って 以下の要件を満たしたシェルスクリプトを作る課題です。
シェルスクリプトの要件
- ファイル名は kadai.sh であること。
- kadai.sh のパスは、~/kadai.sh であること。
- ホームディレクトリで ./kadai.sh を実行すると、自分の名前(アルファベット表記)が画面に表示されること。
- パーミッションを設定して、第三者に対して ./kadai.sh を読み取りと実行の権限を付与すること。 これは、TA. VTA が ./kadai.sh を実行して採点するためである。 書き込みの権限に関しては付与しないこと。
提出内容
以下のものを提出せよ。〆切:2021年5月19日 12:00
- Moodle に提出するもの
- 作成したシェルスクリプト kadai.sh の全文(必須)
- 作成にあたって苦労したこと、参考にしたものなど(任意)
- フォーラム名“必須課題”
- 情報実験機上で提出するもの
- 各自のホームディレクトリに kadai.sh を保存して残すこと。
ヒント
- ファイルの 1 行目はシェバング行「#!/bin/bash」になります。
- ファイルの 2 行目には、自分の名前を出力するコマンドを記述することになります。
- パーミッションの変更には、chmod コマンドを利用します。 前回資料参照。
- ls -l を利用してパーミッションを確認しましょう。Others の権限が、r-x になっていることを確認すること。
本日の応用課題: データファイルの整形
本日の実習の内容+αを用いて,多数のファイルを整理するためのシェルスクリプトを作成しましょう.
課題背景
惑星宇宙グループの H さんは系外惑星の研究をしていて、その研究をすすめるために放射について 勉強しています。さて、勉強をすすめるうちに、プランクの法則というものがあることを知りました。 プランクの法則は、黒体と呼ばれる仮想的な物体が射出する放射の放射強度が、温度をパラメーターとして、 波長の関数として決定されるという法則です。この関数はプランク関数と呼ばれています。 プランクの法則に関しては、付録を参照してください。
H さんは、さまざまな温度の黒体について、プランク関数を用いて波長と放射強度の関係を計算し、 プランク関数のグラフを書こうとしました。しかし、データをうまく整理できず、グラフを書くのに 困っているところです。さらに、グラフを書こうと試行錯誤しているうちに、ファイルの名前を誤って 変更してしまいました。みなさんのシェルスクリプトの力でデータを整理し、 H さんがグラフを書くのを助けてあげましょう。
データの説明
H が計算したデータを以下のように纏めて /home/inex/data/ に格納した。
- data ディレクトリの直下に、3000, 3500, ..., 7000 のディレクトリ(以下、温度ディレクトリと呼ぶ) を配置した。温度ディレクトリ名の数字は黒体の温度 (単位 K) を表す。
- それぞれの温度ディレクトリには、0.00, 0.0i, 0.02, ..., 0.09, 0,i0, 0,ii, ..., i.99, 2.00 というファイル(以下、放射強度ファイルと呼ぶ)が存在していて、 それぞれ波長 0.00, 0.01, 0.02, ..., 0.09, 0.10, 0.11, ..., 1.99, 2.00 μm の 放射強度が格納されている。ファイル名に i が含まれているのは、H さんがキーボードの 1 と I を見誤って、 放射強度ファイルのファイル名の 1 を i にしてしまったためである。
- 上で述べたそれぞれの放射強度ファイルには、プランク関数を用いて計算した、放射強度ファイルの ファイル名に対応する波長の放射強度 (単位 10^{10} W/m^2/sr/m) がテキストで格納されている。 ただし、波長 0 μm に対応する放射強度ファイル 0.00 には、“0.00 (limiting value)” というテキストが格納されている。 これは、プランク関数の波長 0 μm での値は、極限値としてしか求まらないからである。
たとえば、data/5000/i.i0 という放射強度ファイルには “583.224089” というテキストが格納されている。 これは、5000 K の黒体は、波長 1.10 μm の放射を、583.224089 × 10^{10} W/m^2/sr/m の強度で射出することをあらわす。
シェルスクリプトを用いて作成するもの
シェルスクリプトを用いて、以下のものを作成する。
- 正しいファイル名の放射強度ファイル
- ファイル名の i を 1 に戻したもの
- 例えば、i.i5 という放射強度ファイルのファイル名を 1.15 に変更する
- 波長と放射強度の関係を黒体温度ごとにまとめたファイル(以下テーブルファイルと呼ぶ)
- 9 つのテキストファイルからなるものであり、ファイル名は 3000.tbl, 3500.tbl, 4000.tbl, ..., 7000.tbl である。テーブルファイル *.tbl のファイル名に含まれる数字は、黒体温度に対応している。
- 各テーブルファイル *.tbl の中のそれぞれの行が、「波長␣放射強度」を表すようにする。␣は半角 スペースを表している。テーブルファイル *.tbl に書き込む放射強度の単位は変える必要は無いが、 波長は単位を nm に変換する。すなわち、放射強度ファイルのファイル名に記されている(1 が i に変換される前の) 数値の 1000 倍の値をテーブルファイル *.tbl に格納する。 また、波長が昇順になるようにする。ただし、波長が 0 μm のときのデータは含めない。
- テーブルファイル *.tbl には余分な空行を含めないようにする。
-
たとえば、7000.tbl の冒頭 10 行は以下のようになる。
10 0.000000 20 0.000000 30 0.000000 40 0.000000 50 0.000000 60 0.000020 70 0.001254 80 0.025258 90 0.243460 100 1.410813
どのような作業をするとよいかわからない場合は、/home/inex/data/7000 以下にある、 0.0i, 0.02, 0.03, ... の放射強度ファイルの内容と、上記の例を比較してみるとよい。
作成するシェルスクリプト
この課題では、受講生の皆さんには、以下を順番に実行するシェルスクリプトを作成してもらう。 作成したシェルスクリプトは、mktbl.sh という名前で自分のホームディレクトリの直下に保存すること。
- 各自のホームディレクトリに data ディレクトリがあれば、それを削除する。
- 各実験機に配置されている、/home/inex/data 以下のファイルを各自のホームディレクトリの data ディレクトリにコピーする。
- ~/data ディレクトリに含まれる放射強度ファイルのファイル名を正しいものに直す。
- data ディレクトリに 9 つのテーブルファイル *.tbl を作成する。
また、./mktbl.sh をホームディレクトリで実行すると、シェルスクリプトが実行されるようにすること。 TA, VTA がシェルスクリプトの内容を確認し、実行できるように、パーミッションを変更すること。
提出内容
以下のものを提出せよ。〆切:2021年5月19日 12:00
- Moodle に提出するもの
- シェルスクリプト本文
- 作成したシェルスクリプト mktbl.sh の全文
- cat などを利用してシェルスクリプト全文をターミナルに表示し、コピー・アンド・ペーストをするとよい。
- フォーラム名 “応用課題: シェルスクリプト本文”
- 課題に関するコメント
- シェルスクリプト作成に当たって,工夫,または苦労した点.
- 作業協力者がいればその名前, 参考文献(ほかの人のレポートを参考にした場合もしっかり挙げること).
- もし他に言いたいことがあれば記述しても良い.
- フォーラム名 “応用課題: 課題に関するコメント”
- 情報実験機上で提出するもの
- 各自のホームディレクトリに mktbl.sh を保存して残すこと。
- ./mktbl.sh を実行して作成される data ディレクトリを残しておくこと。
さらに進んで
受講生の皆さんにはテーブルファイル *.tbl を作成するところまで行ってもらいました。
これらのファイルと、gnuplot(2018 年度 inex 第 3 回実技資料を参照)というグラフを作るためのプログラムを利用してグラフを作成することができます。
グラフを作成するためには、/home/inex/planck に格納されている、mkfig.gpl というテキストファイルを利用します。 mkfig.gpl の中には、gnuplot にグラフを描画させるための命令が並んでおり、この命令を gnuplot が実行することで グラフを作成します。
具体的には、以下のコマンドを実行すると planck.png というグラフが作成されます。
$ cd ~/data $ cp /home/inex/placnk/mkfig.gpl ./ $ gnuplot mkfig.gpl |

しかし、作成された png ファイルを確認するために、特別な下準備をする必要があるので、 今回の課題ではグラフの作成まで行わず、必要なデータの整理だけを行いました。「特別な下準備」の例としては、 以下のようなものがあります。気になる人は調べてみてください。
- 情報実験機上で画像ファイルを開き、その開いた画面を手元のコンピューターに転送する。 その方法の例として、X 11 フォワーディング。
- 情報実験機上で作成した画像ファイルを手元のコンピューターにダウンロードし、手元の コンピューターで確認する。その方法の例として、sftp。(今年度 inex 第 7 回)
- 手元のコンピューターで gnuplot を実行できるようにして、手元のコンピューターで画像を作成する。
困ったときは
- わからないことがあったらまずは文献あるいはインターネット上の検索エンジンを利用しましょう.
- やっぱりわからないときは友達と相談しましょう.
- どうしてもわからないときは情報実験メーリングリスト inex-2021 を活用しましょう. 同じような疑問を持っている人の助けになるかもしれません.
ヒント
- やり方は一通りではありません. どうすれば一番楽か作業の順序立てを最初に考えましょう.
- 沢山のファイルに同じ処理を施すには, メタキャラクタや ループ処理が便利.
- パイプを活用して 複数のコマンドを組み合わせてみましょう.
- 一つのコマンドでも コマンドラインオプション によって様々な機能を発揮します. man やインターネットで いろいろ調べてみるべし.
- cat, grep, sed, awk等のよく使われる便利なコマンドを調べてみよう!
- ヒントに囚われず, 自由な発想をしよう!!
<< 戻る (データ圧縮・解凍とアーカイブ) 情報実験 第 3 回 のトップへ >> 次へ >>([付録] プランクの法則)