第6回目

sed awk

課題

注意:以下の実行例中のスペース(空白)はコマンド、オプション、引数を見やすくするために挿入している。1つ以上のスペースは1つにまとめることができる。ただし、クウォートやダブルクウォートで囲まれた部分の空白の数は無視できないことに注意する。

  1. まず、各自$HOME/UNIXclassに移動して、ichoに用意した次のディレクトリの内容をコピーする。次に、今コピーしたディレクトリsedawkに移動する。cpコマンドに"-r"オプションをつけるとディレクトリごとコピーできる。

    ----------------------------------------------------------------------------
    icho% cd 
    icho% cd UNIXclass
    icho% cp -r /home1/akira/SAMPLE/sedawk  .
                                                ^^^
                                   (最後のピリオドを忘れないこと)
    icho% cd sedawk
    icho% pwd             (各自自分のホームディレクトリ下であることを確認すること)
    ----------------------------------------------------------------------------
    	

    コピーされるファイルは以下の通り。

    samp1
    正規表現の練習用ファイル
    samp2
    sedの練習用ファイル
    samp3
    awkの練習用ファイル
    samp4
    awkの練習用ファイル
  2. 正規表現に慣れよう

    コピーしたディレクトリ下のファイルsamp1を用いて、以下のようにgrepコマンドを実行してそれらの動作を確認する。

    ----------------------------------------------------------------------------
    icho% more    samp1            # moreで内容を確認する。
    icho% cat -n  samp1            # -n オプションをつけると行番号も表示される。
    
    icho% grep     'C.T'    samp1
    icho% grep     '[Cc]ot' samp1
    icho% grep -i  'C.T'    samp1  # -i オプションをつけると大文字と小文字が
                                    区別されなくなる。
    icho% grep -in 'C.T'    samp1  # -n オプションは行番号も表示する。
    icho% grep -n  '^$'     samp1  【クイズ1:これは何をしている?】
    ----------------------------------------------------------------------------
    	
  3. 正規表現に関する課題

    以下の条件を満たすシェルスクリプトをそれぞれ作成せよ。ただし、使うコマンドはgrepとする。

    1. ファイルsamp1から先頭が「cot」(大文字小文字は区別しない)で始まる行を検索し、行番号も出力するシェルスクリプトをex-1というファイル名で作成せよ。

    2. ファイルsamp1から末尾が「t」(大文字小文字は区別しない)で終わる行を検索し、行番号も出力するシェルスクリプトをex-2というファイル名で作成せよ。

  4. sedに慣れよう

    コピーしたディレクトリ下のファイルsamp2を用いて、以下のようにsedコマンドを実行しそれらの動作を確認する。

    ----------------------------------------------------------------------------
    icho% more    samp2            # moreで内容を確認する。
    icho% cat -n  samp2            # -n オプションをつけると行番号も表示される。
    
    icho% sed      's/UNIX/Linux/' samp2
    icho% sed  -n  '5,7p'          samp2
    icho% sed      '2,13d'         samp2
    
    icho% sed     -e  's/UNIX/Linux/'  -e 's/MSDOS/Windows/'  samp2
    icho% sed  -n -e  's/UNIX/Linux/p' -e 's/MSDOS/Windows/p' samp2
    icho% sed  -n -e  '/UNIX/w out1'   -e '/UNIX/\!w out2'    samp2
                   【クイズ2:これ(上の1行)は何をしている?】
    ----------------------------------------------------------------------------
    	
  5. sedに関する課題

    以下の条件を満たすシェルスクリプトをそれぞれ作成せよ。ただし、使うコマンドはsedとする。

    1. ファイルsamp2の中には「UNIX」という文字列がいくつか含まれているが、行の先頭に「UNIX」と書かれているもののみ「Linux」に変換するシェルスクリプトをex-3という名前で作成せよ。

    2. ファイルsamp2の中の「UNIX」という文字列を「Linux」に変換し、かつ、変換した行だけを出力するシェルスクリプトをex-4という名前で作成せよ。(上記の例で sed 's/UNIX/Linux/' samp2では変換されていない行も出力されている点に注意せよ。)

  6. これ以降は来週に持ち越しにします。

    awkに慣れよう

    コピーしたディレクトリ下にあるファイルsamp3,samp4を用いて以下のようにawkコマンドを実行しそれらの動作を確認する。

    ----------------------------------------------------------------------------
    icho% more    samp3 samp4      # moreで内容を確認する。
    icho% cat -n  samp2 samp4      # -n オプションをつけると行番号も表示される。
    
    icho% awk      '{print $2 $8}'       samp3
    icho% awk      '{print $2 ":" $8}'   samp3
    icho% awk      '{print $2 ":" $NF}'  samp3  # $NFは最終フィールド
    
    icho% awk -F:  '{print $2 ":" $NF}'  samp4  
    icho% awk -F:  '$4>=80 {print $0}'   samp4
    icho% awk -F:  'BEGIN{s=0;n=0}$1~/^WA/{s=s+$4;n=n+1}END{print s/n}' samp4
                   【クイズ3:これ(上の1行)は何をしている?】
    
    icho% date | awk '{printf("Now it is %s%s %s by %s\n",$1,$2,$3,$4)}'
    ----------------------------------------------------------------------------
    	
  7. awkに関する課題

    以下の条件を満たすシェルスクリプトをそれぞれ作成せよ。ただし、使うコマンドはawkとする。

    1. ファイルsamp4の中の各人に対する全科目の合計点を求めて、氏名と合計点を表示するシェルスクリプトをex-5という名前で作成せよ。

    2. dateコマンドの出力を用いて、現在時刻を以下の例に示すような形式で出力するシェルスクリプトをex-6という名前で作成せよ。

      ----------------------------------------------------------------------------
      icho% ex-6
      今日は 2002年01月30日(火)曜日です
      現在の時刻はJSTで12時36分01秒です
      ----------------------------------------------------------------------------
      		

      なお、awkコマンドの記述が長くなり1行に収まらないときは、「\\」記号を最後につけることで改行後もawkの記述を継続できる。

レポート

提出課題

上記課題を実行して出来上がったシェルスクリプトファイル(ex-1からex-4まで)を以下のコマンドを実行し、一つにまとめる。出来上がったファイルを提出課題のファイルとする。以下のコマンドの詳細については、テキスト第3章を参照のこと。

----------------------------------------------------------------------------
icho% pwd   (各自実習を行ったディレクトリであることを確認すること)
icho% more ex-? out? > report-6
----------------------------------------------------------------------------
       
実習レポート

以下の内容を記載したファイルをMuleなどで作成し、そのファイルを 実習レポートのファイルとする。

提出方法

電子メールにて提出する。宛先は、佐藤、鈴木、自分自身とする。 メール送信 report.shを用いて、ichoから送信すること。


授業のページに戻る