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

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

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

本日の実習の内容+αを用いて, 大量 のテキストファイルを一気に仕分けし名前を変更する(リネームする)ためのシェルスクリプトを作成しましょう.

課題背景

随筆家のTさんは新たな作品を作るため, アイディアをテキストファイルに書きためていました. しかし, テキストファイルを整理することには気が回らず, 一つのディレクトリに以下のようにテキストファイルが雑然と存在する状態になっていました.
ファイル名最終更新時刻
2AF.txt2016/03/17 22:00
9Sw.txt2016/04/18 22:00
D2b.txt2016/01/23 22:00
      ・ 
      ・ 
      ・ 
GEF.txt2016/05/24 22:00
hxT.txt2016/02/29 22:00

いざ文章を書こうとしたとき, 書きためていたテキストファイルを整理する必要が出てきました. いつ書いたアイディアなのかすぐに分かるようにするため, ファイル名を見ただけで更新日時(これを以下タイムスタンプという)が分かるように一つ一つリネームしていきました. しかし, 数百とあるテキストファイルを一つ一つ処理するという苦行にTさんの心は折れかけています. 大量のテキストファイルを前に途方に暮れているTさんのため, シェルスクリプトを作成しましょう!

課題概要

みなさんには,

ということをやってもらいます.

ディレクトリの中に626個のテキストファイルが存在します.

テキストファイル 例
        23cHR.txt
        29WuW.txt

それらのテキストファイルには3字の文字列が書き込まれています.

テキストファイルの一例(23cHR.txt)

タイムスタンプを見ることでいつ作成したテキストファイルかを知ることができます.
ファイル例: 23cHR.txt
                  -rw-r--r-- 1 inex inex 77 2016-02-17 03:26 23cHR.txt

ファイルをタイムスタンプ順に全て出力すると, ある文章ができあがります.

また, いくつかのファイルには, 段落の終わりを示すEがファイルの末尾に含まれています.

Eが含まれているテキストファイルの一例(4p3.txt)

以下にもう少し詳しい説明を書きます.

スクリプトの仕様

以下の仕様をすべて満たすスクリプト(essay.sh) を作成せよ. スクリプトはホームディレクトリ直下に格納し,スクリプトには実行権限を与えること.

  1. 自分のホームディレクトリ直下に作業ディレクトリ(ex. work ディレクトリ)を作成する.作業ディレクトリ以下にダウンロードしたファイルや作業成果を格納する.
  2. 以下のアドレスにある tar.gz ファイルをダウンロードし解凍する.
    アドレスからダウンロードするには以下のコマンドを使う.
    $ wget http://www.ep.sci.hokudai.ac.jp/~inex/y2017/0428/practical/kadaidata/essay.tar.gz
  3. 解凍してできた"essay/file/"以下に格納されている全てのテキストファイルの名前をそれぞれのタイムスタンプに合わせて"YYYYMMDD.txt"に変える. ここで"YYYY" は西暦年(ex. 1990 年=> 1990), "MM" は月(ex. 5 月=> 05), "DD" は日(ex. 1 日=> 01) を表す.
  4. 3で作ったファイルを段落ごとに異なるディレクトリに仕分けする. ファイルを格納するディレクトリを"essay/"以下に作成し, ディレクトリの名前は順番に"essay/para01, essay/para02,.."とする.
  5. 各段落のファイルをタイムスタンプ順につなぎ合わせたファイル"essay/para01.txt, essay/para02.txt,.."を作成する. 一行あたり30文字にすること. 段落の最後を表す"E"は削除すること.
  6. 5で作ったファイルをつなぎ合わせて"essay/result.txt"を作成する. ただし, 段落間には空行を一行入れる.
  7. 6で作った"essay/result.txt"を"essay/kaitou/essay1.txt", "essay/kaitou/essay2.txt", "essay/kaitou/essay3.txt"と比較し, 正しく作成されているか判定する. essay1, essay2, essay3のいずれかが正解です.

提出内容

以下のものを suu に投稿してください. その際, それぞれ対応するタグに投稿してください.

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

注意点

困ったときは

ヒント




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

最終更新日: 2017/04/22 吉田 辰哉 copyright © 2017 inex