sed awk
注意:以下の実行例中のスペース(空白)はコマンド、オプション、引数を見やすくするために挿入している。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
を用いて、以下のように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:これは何をしている?】
----------------------------------------------------------------------------
正規表現に関する課題
以下の条件を満たすシェルスクリプトをそれぞれ作成せよ。ただし、使うコマンドはgrep
とする。
ファイルsamp1
から先頭が「cot」(大文字小文字は区別しない)で始まる行を検索し、行番号も出力するシェルスクリプトをex-1
というファイル名で作成せよ。
ファイルsamp1
から末尾が「t」(大文字小文字は区別しない)で終わる行を検索し、行番号も出力するシェルスクリプトをex-2
というファイル名で作成せよ。
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行)は何をしている?】
----------------------------------------------------------------------------
sedに関する課題
以下の条件を満たすシェルスクリプトをそれぞれ作成せよ。ただし、使うコマンドはsed
とする。
ファイルsamp2
の中には「UNIX」という文字列がいくつか含まれているが、行の先頭に「UNIX」と書かれているもののみ「Linux」に変換するシェルスクリプトをex-3
という名前で作成せよ。
ファイルsamp2
の中の「UNIX」という文字列を「Linux」に変換し、かつ、変換した行だけを出力するシェルスクリプトをex-4
という名前で作成せよ。(上記の例で sed 's/UNIX/Linux/' samp2
では変換されていない行も出力されている点に注意せよ。)
これ以降は来週に持ち越しにします。
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)}'
----------------------------------------------------------------------------
awkに関する課題
以下の条件を満たすシェルスクリプトをそれぞれ作成せよ。ただし、使うコマンドはawk
とする。
ファイルsamp4
の中の各人に対する全科目の合計点を求めて、氏名と合計点を表示するシェルスクリプトをex-5
という名前で作成せよ。
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などで作成し、そのファイルを 実習レポートのファイルとする。
学籍番号、所属、氏名
クイズ1、クイズ2、クイズ3の解答
今回の講義内容と各自が実施した課題内容の項目、問題点、疑問点(以上は箇条書きにすること)
電子メールにて提出する。宛先は、佐藤、鈴木、自分自身とする。 メール送信 report.shを用いて、ichoから送信すること。
メールの件名は「report6」と(半角文字)とする。
提出期限は、2月5日(火)までとする。
授業のページに戻る