本日の課題
本日は必須課題が1つと応用課題が2つ存在します.
必須課題は成績評価のために必須となりますので必ず回答してください.
応用課題は単位取得のために必須とはなりませんが, 回答すると成績評価があがる可能性があります.
本日の必須課題
本日の必須課題はテキストエディタを使ってファイルを作成してもらう課題です.
以下の要件を満たしたファイルを実験機上に作ってください.
- ファイル名 : kadai0612.txt
- ファイルの中身 : 自分の名前を英字フルネームでテキストエディタを用いて入力
- suuで行うこと
- タグ:[2020]4. テキストファイルの作成
- 作成したファイルの絶対パス(場所)を本文に書き込むこと.難しかった点なども書き込んでくれると良い.
- 課題ができているかどうかは上記の場所にしっかりとファイルがあるかどうかをもとに判定します.
-ヒント 作成したファイルのパスは/home/……から始まり, ……/kadai0612.txtで終わるはずです. - 〆切:2020年6月17日 12:00
本日の応用課題1:シェルスクリプトの作成 ファイル一覧の作成
本日の実習の内容+αを用いて,多数のファイルのリストを作成するためのシェルスクリプトを作成しましょう.
課題背景
惑星宇宙グループの M 君は,卒業研究でたくさんの天体の動きをシミュレーションしました. そのデータを天体毎のファイルに分けて保存したところ, 天体数が多すぎたためにディレクトリの中がぐちゃぐちゃになってしまいました. そこでどんなファイルがあるのかを確認するために,ファイル名をリストにして保存することにしました.
そこで皆さんはM君を手伝ってファイルのリストを作成してください.
データの概要
本課題で用いるのは240個のファイルです. このファイルはアーカイブファイル(manydata.tar.gz)にまとめられて配布されます.このアーカイブファイルを解凍するとファイルが含まれるディレクトリが生成されます.
ファイル名は27_XparticleY.dat(Xは5~8, Yは05~64)という形になっている.
設問(データの整形)
以下の要件を満たした, ファイルリストを作るためのシェルスクリプト(listing.sh)を作成してください.
- ホームディレクトリ直下に作業ディレクトリ "work" を作成し,データファイルが格納されているアーカイブファイルを "work" 内でダウンロード・解凍する.アーカイブファイルの URL は以下である:
ダウンロードするには以下をスクリプト内で実行するようにすればよい.
wget http://www.ep.sci.hokudai.ac.jp/~inex/y2020/0612/practical/kadaidata/manydata.tar.gz - ファイル名毎に改行された240行になるファイルリストを作成する.
- このとき,ファイル名はファイルの中で数字が小さい順に並べること.(以下に形式を載せる)
- ファイルリストの名前はlist.datとし,"work" 直下に配置する.
ファイルリストの形式
27_5particle05.dat 27_5particle06.dat ⋮ 27_5particle64.dat 27_6particle05.dat ⋮ 27_8particle64.dat |
提出内容
以下のものを suu に投稿せよ.その際, それぞれ対応するタグを用いること.
- シェルスクリプト(タグ : [2020] 応用課題2-1. ファイルリスト作成スクリプト本文
- 作成したシェルスクリプト listing.sh の全文
- 〆切:2020年6月24日 12:00
- 課題に関するコメント (タグ : [2020] 応用課題2-2. ファイルリスト作成スクリプトに関するコメント)
- シェルスクリプト作成に当たって,工夫,または苦労した点.
- 作業協力者がいればその名前, 参考文献(ほかの人のレポートを参考にした場合もしっかり挙げること).
- もし他に言いたいことがあれば記述しても良い.
- 〆切:2020年6月24日 12:00
本日の応用課題2:シェルスクリプトの作成 楽しいカレンダーを作ろう
本日の実習の内容+αを用いてカレンダーを作成してみましょう. 本課題では2020年度のカレンダーを作成してもらいます.
この課題を行う際は, 環境設定を日本語にするか英語にするかによって結果が異なります.
日本語, 英語どちらでも好きな方の環境で課題を実行してください.
日本語に環境を設定する方法は[1-2]実習の準備にて説明があります.
英語に環境を設定するには以下のコマンドを実行してください.
$ export LC_ALL=C |
課題背景
惑星宇宙グループのM君は, 物忘れが激しいです.大事な予定がいつに入っているかを覚えていても, 今日が"いつだったか"すらを忘れてしまって予定に間に合わないこともしばしばあります.そんなM君に今日がいつなのかを把握させるためにカレンダーを作成してプレゼントしてあげましょう.
課題の概要
本課題は以下の三段階に分けられます. それぞれの段階を達成するごとに評価が良くなります.- 2020年度のカレンダーを作成.
- 全部の曜日を日曜日に変える.
- 5-8月の金曜日だけ金曜日に戻す.
1段階目 カレンダーを作ろう
bashにはカレンダーを作成するカレンダーコマンド(cal)が存在します.
$ cal June 2020 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
カレンダーコマンド(cal)は引数を月, 年のように与えてあげると指定した年月のカレンダーを作成することができます.
$ cal 05 2020 May 2020 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
このコマンドを利用して上から2020年1月, 2月, ……, 12月となる縦一列のカレンダーファイル( calendar.txt )を作成してください.
上手くいくと calendar.txt のはじめの1月, 2月の部分は以下のように出力されているはずです
January 2020 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 February 2020 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
2段階目 きっと毎日が日曜日
カレンダーをM君にプレゼントしたところ, "週に5日も活動しなきゃいけない平日があるのはおかしい"と正気を疑うような発言が飛び出してきました.
"きっと毎日が日曜日"と信じてやまないM君は魔法で全部日曜日に変えようと考えましたが, 魔法使いになってないM君はカレンダーを変えることが出来ませんでした.
そんなM君のためにcalendar.shを改良してあげてください.
1段階目が終了した時点ではカレンダーのそれぞれの月, 年が書き込まれている行の下には"Su Mo Tu We Th Fr Sa"と曜日が記されている行が存在しています.
1月から12月まで記されている曜日の表記をすべて日曜日を示す"Su"に変更しするように calendar.sh を改良してください.
上手くいくと calendar.txt のはじめの1月, 2月の部分は以下のように変更されているはずです
January 2020 Su Su Su Su Su Su Su 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 February 2020 Su Su Su Su Su Su Su 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
3段階目 情報実習は受けてもらわなきゃ
M君が全部の曜日を日曜日にしたカレンダーをもとに堕落していたところ, それをふと見たI先生が"情報実習はしっかりと受けてもらわなくちゃ"とM君に言います.
皆さんはそんなM君を更生させるためにカレンダーを改良してください.
情報実習の授業のある5, 6, 7, 8月の金曜日に当たる曜日をちゃんと金曜日に戻すように calendar.sh を改良してください.
上手くいくと calendar.txt の中盤の5月, 6月の部分は以下のように変更されているはずです
May 2020 Su Su Su Su Su Fr Su 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 June 2020 Su Su Su Su Su Fr Su 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
提出内容
以下のものを suu に投稿せよ.その際, それぞれ対応するタグを用いること.
- シェルスクリプト(タグ : [2020] 応用課題3-1. カレンダー作成スクリプト本文
- 作成したシェルスクリプト calendar.sh の全文
- 〆切:2020年6月24日 12:00
- 課題に関するコメント (タグ : [2019] 応用課題3-2. カレンダー作成スクリプトに関するコメント)
- 何段階目迄達成できたかを最初の行に書き込むこと.
- シェルスクリプト作成に当たって,工夫,または苦労した点.
- 作業協力者がいればその名前, 参考文献(ほかの人のレポートを参考にした場合もしっかり挙げること).
- もし他に言いたいことがあれば記述しても良い.
- 〆切:2020年6月24日 12:00
困ったときは
- わからないことがあったらまずは文献(過去のレポート含む)あるいはインターネット上の検索エンジンを利用しましょう.
- やっぱりわからないときは友達と相談しましょう.
- どうしてもわからないときは情報実験メーリングリスト inex-2020 を活用しましょう. 同じような疑問を持っている人の助けになるかもしれません.
ヒント
- やり方は一通りではありません. どうすれば一番楽か作業の順序立てを最初に考えましょう.
- 沢山のファイルに同じ処理を施すには, メタキャラクタや ループ処理が便利.
- パイプを活用して 複数のコマンドを組み合わせてみましょう.
- 一つのコマンドでも コマンドラインオプション によって様々な機能を発揮します. man やインターネットで いろいろ調べてみるべし.
- cat, grep, sed, awk等のよく使われる便利なコマンドを調べてみよう!
- ヒントに囚われず, 自由な発想をしよう!!
<< 戻る (データ圧縮・解凍とアーカイブ) 情報実験 第 3 回 のトップへ >>