第 5 回 - 総合演習(1)

[11/07, 2009 H.Aman]

A 問題

  • a1. (シェルスクリプト)

    ファイル(ただし,テキストファイルに限る)をコマンドライン引数として受け取り, そのファイル名,先頭と末尾の内容(三行ずつ)をそれぞれ表示するシェルスクリプト a1.sh を作りなさい. ただし,先頭と末尾の内容を表示する際には行番号付きで表示するものとする.

    (ヒント)cat コマンドを -n オプション付きで実行すると行番号が表示される

    (実行例)
       $ bash a1.sh foo.c
       === foo.c ===
       1  #include <stdio.h>
       2
       3  int main(void)
       
       .....
       
       17
       18    return 0;
       19  }

  • a2.(シェルスクリプト)

    次の手順を実行するシェルスクリプト a2.sh を作りなさい.
    (1)まず,カレントディレクトリに src というディレクトリを作る.
    (2)続いて,カレントディレクトリ(サブディレクトリまでは見なくてよい)に置かれている C ソースファイル(拡張子 .c)をディレクトリ src の下へコピーする.


  • a3.(シェルスクリプト)

    ディレクトリ X 以下(サブディレクトリも含む)に存在する全ての C ソースファイル(拡張子 .c)に対し, そのファイル名の一覧を表示するシェルスクリプト a3.sh を作りなさい. ただし,各ソースファイル名の拡張子(末尾の .c)は取り除いて出力すること. また,ディレクトリ X は実行時のコマンドライン引数として与えられるものとする.

    (実行例)X = /home/aman/tmp/emb-pxc/cc の場合
       $ bash a3.sh /home/aman/tmp/emb-pxc/cc
       /home/aman/tmp/emb-pxc/cc/cc/cc
       /home/aman/tmp/emb-pxc/cc/ccom/stabs
       .....
       /home/aman/tmp/emb-pxc/cc/cpp/token

  • a4.(シェルスクリプト)

    次の手順を実行するシェルスクリプト a4.sh を作りなさい.
    (1)まず,カレントディレクトリに backup というディレクトリを作る. ただし,既に backup というディレクトリが存在している場合は「バックアップディレクトリの作成はスキップします」と表示するだけにする.
    (2)続いて,カレントディレクトリ(サブディレクトリまでは見なくてよい)に置かれている全ての「ファイル」をディレクトリ backup の下へコピーする. ※ディレクトリはコピーしなくてよいことに注意


  • a5.(シェルスクリプト)

    コマンドライン引数として三つのファイル名 A, B, C を受け取り, A と B を比較して新しい方のコピーを C として生成する シェルスクリプト a5.sh を作りなさい. なお,A, B はいずれも存在するファイルであり,C は存在しないものとしてよい.

    (実行例)
       $ bash a5.sh foo.c bar.c hoge.c
       ... foo.c の方が bar.c よりも新しい場合,foo.c のコピーを hoge.c として作る
       ... bar.c の方が foo.c よりも新しい場合,bar.c のコピーを hoge.c として作る

  • a6.(Perl)

    テキストファイルの内容を出力するフィルタプログラム a6.pl を作りなさい. ただし,出力時には行番号とその行の文字数もあわせて出力すること.

    (実行例)
       $ perl a6.pl foo.c
       1(19): #include <stdio.h>
       2(1): 
           ....
       18(12):   return 0;
       19(2): }

  • a7.(Perl)

    テキストファイルの内容から最初の行と最後の行だけを出力するフィルタプログラム a7.pl を作りなさい.

    (実行例)
       $ perl a7.pl foo.c
       #include <stdio.h>
       }

  • a8.(Perl)

    CSV(カンマ区切り)形式のデータを読込み,左端(1列目)と右端のデータを ハイフンでつないで出力するフィルタプログラム a8.pl を作りなさい.


  • a9.(Perl)

    テキストファイルを読み込み,次のパターンにマッチする行だけを出力する フィルタプログラム a9.pl を作りなさい.

    「その行は 0 文字以上の空白文字で始まり,その後に p が登場する」

    ただし,行番号もあわせて出力すること.

    (実行例)
       $ perl a9.pl foo.c
       9:  printf("N = %d\n", N);
       16:  printf("1 + ... + %d = %d\n", N, sum);

  • a10.(Perl)

    テキストファイルを読み込み,その中で s で終わる単語のみを出力するフィルタプログラム a10.pl を作りなさい.

    (実行例)
       $ perl a10.pl foo.txt
       progress
       systems
       this
       .....