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

  1. 事前準備
  1. シェル
  1. テキストエディタ
  1. シェルスクリプト
  1. [付録] データ圧縮・解凍とアーカイブ
  1. 本日の課題
情報実験第 4 回トップへ

本日の課題

本日は必須課題が1つと応用課題が2つ存在します.
必須課題は成績評価のために必須となりますので必ず回答してください.
応用課題は単位取得のために必須とはなりませんが, 回答すると成績評価があがる可能性があります.

本日の必須課題

本日の必須課題はテキストエディタを使ってファイルを作成してもらう課題です.
以下の要件を満たしたファイルを実験機上に作ってください.

本日の応用課題1:シェルスクリプトの作成 ファイル一覧の作成

本日の実習の内容+αを用いて,多数のファイルのリストを作成するためのシェルスクリプトを作成しましょう.

課題背景

惑星宇宙グループの M 君は,卒業研究でたくさんの天体の動きをシミュレーションしました. そのデータを天体毎のファイルに分けて保存したところ, 天体数が多すぎたためにディレクトリの中がぐちゃぐちゃになってしまいました. そこでどんなファイルがあるのかを確認するために,ファイル名をリストにして保存することにしました.
そこで皆さんはM君を手伝ってファイルのリストを作成してください.

データの概要

本課題で用いるのは240個のファイルです. このファイルはアーカイブファイル(manydata.tar.gz)にまとめられて配布されます.このアーカイブファイルを解凍するとファイルが含まれるディレクトリが生成されます.
ファイル名は27_XparticleY.dat(Xは5~8, Yは05~64)という形になっている.

設問(データの整形)

以下の要件を満たした, ファイルリストを作るためのシェルスクリプト(listing.sh)を作成してください.

  1. ホームディレクトリ直下に作業ディレクトリ "work" を作成し,データファイルが格納されているアーカイブファイルを "work" 内でダウンロード・解凍する.アーカイブファイルの URL は以下である: ダウンロードするには以下をスクリプト内で実行するようにすればよい.
    wget http://www.ep.sci.hokudai.ac.jp/~inex/y2020/0612/practical/kadaidata/manydata.tar.gz
  2. ファイル名毎に改行された240行になるファイルリストを作成する.
    • このとき,ファイル名はファイルの中で数字が小さい順に並べること.(以下に形式を載せる)
    • ファイルリストの名前はlist.datとし,"work" 直下に配置する.

ファイルリストの形式

  27_5particle05.dat
  27_5particle06.dat
  ⋮
  27_5particle64.dat
  27_6particle05.dat
  ⋮
  27_8particle64.dat

提出内容

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

  1. シェルスクリプト(タグ : [2020] 応用課題2-1. ファイルリスト作成スクリプト本文
  2. 課題に関するコメント (タグ : [2020] 応用課題2-2. ファイルリスト作成スクリプトに関するコメント)

本日の応用課題2:シェルスクリプトの作成 楽しいカレンダーを作ろう

本日の実習の内容+αを用いてカレンダーを作成してみましょう. 本課題では2020年度のカレンダーを作成してもらいます.

この課題を行う際は, 環境設定を日本語にするか英語にするかによって結果が異なります.
日本語, 英語どちらでも好きな方の環境で課題を実行してください.
日本語に環境を設定する方法は[1-2]実習の準備にて説明があります.
英語に環境を設定するには以下のコマンドを実行してください.

$ export LC_ALL=C

課題背景

惑星宇宙グループのM君は, 物忘れが激しいです.大事な予定がいつに入っているかを覚えていても, 今日が"いつだったか"すらを忘れてしまって予定に間に合わないこともしばしばあります.そんなM君に今日がいつなのかを把握させるためにカレンダーを作成してプレゼントしてあげましょう.

課題の概要

本課題は以下の三段階に分けられます. それぞれの段階を達成するごとに評価が良くなります.
  1. 2020年度のカレンダーを作成.
  2. 全部の曜日を日曜日に変える.
  3. 5-8月の金曜日だけ金曜日に戻す.
上記の要件を満たすシェルスクリプト( calendar.sh )を作成してください.

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 に投稿せよ.その際, それぞれ対応するタグを用いること.

  1. シェルスクリプト(タグ : [2020] 応用課題3-1. カレンダー作成スクリプト本文
  2. 課題に関するコメント (タグ : [2019] 応用課題3-2. カレンダー作成スクリプトに関するコメント)

困ったときは

ヒント




<< 戻る (データ圧縮・解凍とアーカイブ)      情報実験 第 3 回 のトップへ >>

最終更新日: 2020/06/01 茂木 遥平 copyright © 2020 inex