ami.ee.uec.ac.jp56% ls -l total 75 -rw-r--r-- 1 rsaito bin 4101 Jul 6 22:44 #awk.html# -rwxr-xr-x 1 rsaito bin 125 Jul 3 22:12 2e* -rw-r--r-- 1 rsaito bin 3744 Jul 6 22:43 awk.html -rw-r--r-- 1 rsaito bin 3878 Jul 6 22:39 awk.html~ -rwxr-xr-x 1 rsaito bin 641 Jul 5 23:17 file* -rw-r--r-- 1 rsaito bin 3816 Jul 6 22:38 file.html -rw-r--r-- 1 rsaito bin 3878 Jul 6 22:34 file.html~ -rw-r--r-- 1 rsaito bin 2125 Jul 6 22:30 foreach.htmlとでて来ますが、ここで 1 番目と 3 番目と 5 番目だけ欲しい場 合には、
% ls -l | awk '{printf "%s %s %s\n",$1,$3,$5}' total -rw-r--r-- rsaito 4805 -rwxr-xr-x rsaito 125 -rw-r--r-- rsaito 3744 -rw-r--r-- rsaito 3878 -rwxr-xr-x rsaito 641 -rw-r--r-- rsaito 3816 -rw-r--r-- rsaito 3878 -rw-r--r-- rsaito 2125ここで printf は c 言語と同じ関数の形をしています。awk ' {print $1,$3,$5}' でもok です。このようにして、必要な部分だ けを取り出します。これを set や foreach でで 変数に代入すれ ば ok です。詳しい awk の使いかたは、man awk や awk を解説し た本を読んでみてください。 perl でもおなじことができます。 次の例は、ある directory の中の *.c または *.h という file のなかに 特定の 言葉 $argv があるかどうかを調べます。これは c 言語でかかれた ライブラリの中から必要な file を探すときに 便利です。
#!/bin/csh foreach i(`/bin/ls *.c *.h`) set ss = `grep $argv $i | wc | awk '{print $1}'` if ($ss > 0) then echo "****" $i "****" grep $argv $i endif end echo fa: nomal end.
# 文字の置換は sed で s/aaa/bbb/g でできます。 cat file | sed -e 's/kaerumae/kaetaato/g' # sed では 行の先頭は ^ で表します。 # 以下は file の中で、start から end までを切り取ります。 sed -n '/^ start sentence/,/^ end sentence/p' file # awk でも ok です。 awk /start/,/end/ < file >! kekkased をもっと詳しく説明したいところですが、まず上を試して見て ください。パイプ | を駆使すると、結構いろいろなことができま す。sed に興味をもったら、sed の 具体例を作って私に送ってく ださい。登録します。
もっと細かいことがしたいとなると、perl のおでましです。 perl は、network 上の interface をも持っていますから、強力で す。ほとんどの場合、csh で スクリプトを作るより perl で作っ た方が実行速度も早いです。もし興味をもったら perl も勉強して みてください。