第 5 回 - 総合演習(1)

[11/07, 2009 H.Aman]

B 問題

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

    データファイル(一行に整数が一つずつ書いてあるテキストファイル)の中から n 番目に大きな値を見つけ出して出力するシェルスクリプト b1.sh を作りなさい. ただし,対象となるデータファイルと n は, それぞれコマンドライン引数で与えられるものとする(実行例参照). ※ファイルが存在するかどうか,長さが適切かのチェックはしなくてよい.

    (実行例)
       $ bash b1.sh data.txt 5
       99913  (← 5 番目に大きな値を出力)

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

    カレントディレクトリ(サブディレクトリは含まない)に存在するすべての C ソースファイルの内容を一つのファイルに連結するシェルスクリプト b2.sh を作りなさい. ただし,各ソースファイルの始まりは

    「---(ファイル名)--------」

    として,区切りが分かるようにすること.
    なお,連結先のファイル名はコマンドライン引数で与えられるものとする.

    例えば,カレントディレクトリに bar.c, foo.c, hoge.c という三つの C ソースファイルが存在していた場合:

    $ bash b2.sh all.txt
    と実行すると all.txt が作られて,その内容は以下のようになる:
    ---(bar.c)-----------
    
    bar.c の内容
    
    ---(foo.c)-----------
    
    foo.c の内容
    
    ---(hoge.c)-----------
    
    hoge.c の内容

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

    ホームディレクトリ以下(サブディレクトリも含む)に存在する全ての C ソースファイルについて,そのファイル名とファイルサイズを次の形式で出力するシェルスクリプト b3.sh を作りなさい.

    「ファイル名(サイズ)」

    例えば foo.c (25) といった具合いである. なお,サイズは 「ls -s ファイル名」で調べることができるので, cut コマンドを使ってサイズのみを切り出すとよい.


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

    カレントディレクトリ以下(サブディレクトリも含む)に存在するファイルの中で「拡張子が .html」のファイルをコピーするシェルスクリプト b4.sh を作りなさい. なお,コピー先のファイル名では拡張子を .htm とすること.

    例えば,index.html というファイルが存在していた場合,そのコピーを index.htm として作る.


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

    次の手順を実行するシェルスクリプト b5.sh を作りなさい.
    (1) まず,カレントディレクトリに backup というディレクトリが存在するかどうかを調べ,存在していた場合はその名前を backup-(今日の日付) へ変更する. なお,「今日の日付」は「date +%m%d」で調べることができる.
    (2) ディレクトリ backup を作る.
    (3) カレントディレクトリ(サブディレクトリを含まない)に存在する全てのファイルを backup の下へコピーする.


  • b6.(Perl)

    テキストファイルを読込み,その中で最も長い行(文字数の多い行)の行番号,文字数,内容を出力する Perl スクリプト b6.pl を作りなさい.

    (実行例)
       $ perl b6.pl foo.c
       16 行目, 41 文字:
      printf("1 + ... + %d = %d\n", N, sum);

  • b7.(Perl)

    整数が一行に一つずつ書かれたデータファイルを入力として, その中で二番目に大きな値と二番目に小さな値を除いた残りの数(最大値と最小値も含まれることに注意)の合計値を出力する Perl スクリプト b7.pl を作りなさい.

    (実行例)
       $ perl b7.pl data.txt
       502588461

  • b8.(Perl)

    CSV(カンマ区切り)形式のデータを読込み,一番右端の列の合計値を求めて出力する Perl スクリプト b8.pl を作りなさい. ただし,一行目には項目名が入っているので計算の対象外とすること. ※「行」ではなく「列」であることに注意

    (実行例)
       $ perl b8.pl data.csv
       48591

  • b9.(Perl)

    C のソースファイルを入力とし,printf 関数と scanf 関数が使われている行だけを行番号付きで表示する Perl スクリプト b9.pl を作りなさい. なお,printf や scnaf という文字列がコメント文の中や " " で囲まれた中に登場する可能性もあるが,そこまでは考慮しなくてよい.

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

  • b10.(Perl)

    テキストファイルを入力とし,その中に登場する単語の中で 10 文字以上のものを出力する Perl スクリプト b10.pl を作りなさい. ただし,単語を構成する文字として許されるのは アルファベット(小文字, 大文字)のみとする.

    (実行例)
       $ perl b10.pl sample.txt
       compression
       understanding
       .....
       cooperation
       development