next up previous
Next: awk Up: UNIX のテキスト・ファイル文化 Previous: 標準入出力のリダイレクション、パイプ

フィルター

なるべく自分の手で操作して確かめながら、以下の説明を聴こう (読 もう)。多くのファイルを扱うので、適当なディレクトリィ (以下の説明では filter という名前) を作って、そこで作業すると良いだろう。ディレ クトリィのことが良く分からない人は、後で復習しておくこと15


まず以下の準備をしてから、その後の操作をして下さい。(tcsh の設 定がまだの人は、tcsh とタイプして、tcsh を起動し てから実習を始めて下さい。)
\begin{screen}\footnotesize
\begin{tabbing}
xxxxxxxx\=xxxxxxxx\=xxxxxxxx\=xxxxxx...
...襪呂此\\
{\tt waltz11\% } \underline{\tt cat LIST}
\end{tabbing}\end{screen}

UNIX システムは、標準入出力のリダイレクション、パイプ機能を縦横無尽 に活用するように構築されている。そのため、標準入力から入力し、標準出力 に出力し、他の入出力は使わないで済む、というコマンドが多い。このような プログラムをフィルターと呼ぶ。フィルターは簡単な機能しか持た ないものが多いが (その代わり高速に実行できるようチューニングされている)、 複数個のフィルターをパイプで接続することによって、複雑な仕事が出来るよ うになっている。

grep
テキスト・ファイルから指定した文字列を検索して、それを含む行を表示す る。
検索に用いるパターンの指定には、正規表現 (regular expression16) と呼ばれる形式が利用できる (grep の名前の 由来は global/regular-expression/print)。
\begin{screen}\footnotesize
\begin{tabbing}
x\=xxxxxxxxxxxxxxxxxxxxxxxxxxxx\= xx...
... ee-list} から \\
\>\> ee680, ee780 を含む行を探す。
\end{tabbing}\end{screen}
sort
テキストファイルを行単位で、順序付けて(通常はアルファベット順に)並 べ変える。 例えばカレントディレクトリィにあるファイルをサイズが大きい順にリスト・ アップするには、

		ls -l | sort +3 -n -r
(ここでは、ls -l の出力の第3フィールドにはファイルのサイズがある と仮定している。)
wc
テキスト・ファイル中の単語数、行数、文字数を数える。

		wc alice29.txt
uniq
連続する同じ内容の行を1つにまとめる。
-c とすると、同じ行が何行続いたか表示する。次の例は、 今回のハイライトとも言える凝った例である。

		cat alice-words | sort | uniq -c | sort -n
一体何をやっているのか? 一段一段確認しながらチェックしよう。
長い コマンドはシェル・スクリプト17 にすると便利である。

		cat top20 
top20 alice-words
tr
文字単位の置換、削除を行う。
tr [-cds] [文字列1 [文字列2]] パターンには文字コードを 8 進数で指定できる (以下の例を参照) 18 。また文字の範囲を - で指定できる。 A-Z で `A' から `Z' までの文字 (つまり英大文字) を表 す。

		 cat alice29.txt | tr a-z A-Z 						    小文字を大文字にする。 
cat alice29.txt | tr A-Z a-z 大文字を小文字にする。
cat DOS-text.doc | tr -d "$\backslash$015$\backslash$032" コードが 015, 032 の文字を削除する。
cat alice29.txt | tr -cs A-Za-z '$\backslash$012' アルファベット以外の文字を 012 に変換。
→ 一行一単語に分解する。
(上記の ``alice-words'' は ``cat alice29.txt | tr -cs A-Za-z ' $\backslash$012'>alice-words'' として作った。つまりアルファベット以外の 文字の連なりを改行に変換した。)
head
最初の数行のみ表示するコマンド。
オプションを何も指定しないと最初の 10 行のみ表示する。 -x とすると最初の x 行を表示する。

		 head -30 /usr/dict/words 		 /usr/dict/word の先頭から 30 行を表示する。
tail
テキストの最後の方を表示するコマンド。
オプションを何も指定しないと 10 行のみ表示する。 -x とすると 最後の x 行を表示する。+x とすると、最初の x 行を除いた残 りを表示する。

		 cat sawyr10.txt | tail -30 		 sawyr10.txt の最後の 30 行を表示する。
nkf
日本語の文字コード(漢字コード)の変換をする。 次のようにすると DOS や Windows パソコンで作ったテキスト・ファイルを 情報科学センターのワークステーションで利用できるようになる (文字コード を日本語 EUC に変換し、CR, C-z (032) を削除する。)。

		nkf -ed ファイル名  | tr -d "$\backslash$032" > 新しいファイル名
また、逆にワークステーションで作ったテキスト・ファイルは

		nkf -sc ファイル名 > 新しいファイル名
で Windows で使えるようになる (文字コードを、シフトJISに変換し、 行末に CR をつける)。
(ただし、テキスト・ファイルの形式の変換の目的だけならば qkc とい うコマンドが便利かも知れない。 qkc -eu ファイル名 でワークステーション形式に、 qkc -ms ファイル名 で Winwos 形式になる。)
sed
文字列の置換など、指示に従って編集するコマンド。


next up previous
Next: awk Up: UNIX のテキスト・ファイル文化 Previous: 標準入出力のリダイレクション、パイプ
Masashi Katsurada 平成10年7月2日