 
 
 
 
 
   
 Next: awk
 Up: UNIX のテキスト・ファイル文化
 Previous: 標準入出力のリダイレクション、パイプ
なるべく自分の手で操作して確かめながら、以下の説明を聴こう (読
もう)。多くのファイルを扱うので、適当なディレクトリィ (以下の説明では 
filter という名前) を作って、そこで作業すると良いだろう。ディレ
クトリィのことが良く分からない人は、後で復習しておくこと15
まず以下の準備をしてから、その後の操作をして下さい。(tcsh の設
定がまだの人は、tcsh とタイプして、tcsh を起動し
てから実習を始めて下さい。)
 
UNIX システムは、標準入出力のリダイレクション、パイプ機能を縦横無尽
に活用するように構築されている。そのため、標準入力から入力し、標準出力
に出力し、他の入出力は使わないで済む、というコマンドが多い。このような
プログラムをフィルターと呼ぶ。フィルターは簡単な機能しか持た
ないものが多いが (その代わり高速に実行できるようチューニングされている)、
複数個のフィルターをパイプで接続することによって、複雑な仕事が出来るよ
うになっている。
- grep
- テキスト・ファイルから指定した文字列を検索して、それを含む行を表示す
る。
 検索に用いるパターンの指定には、正規表現 (regular
expression16) と呼ばれる形式が利用できる (grep の名前の
由来は
global/regular-expression/print)。
   
 
- 
-v とすると、パターンを含まない行を表示する。
   
 
- -i とすると、大文字・小文字を区別しないで検索する。
   
 
 
- sort
- テキストファイルを行単位で、順序付けて(通常はアルファベット順に)並
べ変える。
- -r     逆順に並べる。
- -n     数値としての大小で並べ変える。
- +x (x は整数)     第 x フィールドの要素の大小で並べる。
 例えばカレントディレクトリィにあるファイルをサイズが大きい順にリスト・
アップするには、
		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]]
- -d は削除することを表す。
- -s は同じ字が連続した場合、一字に置換することを表す。
- -c はパターンに含まれない文字を対象にする。
 パターンには文字コードを 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 " 015 015 032" 						 コードが 015, 032 の文字を削除する。 032" 						 コードが 015, 032 の文字を削除する。
 cat alice29.txt | tr -cs A-Za-z ' 012' 						 アルファベット以外の文字を 012 に変換。 012' 						 アルファベット以外の文字を 012 に変換。
 → 一行一単語に分解する。
 (上記の ``alice-words'' は ``cat alice29.txt | tr -cs
A-Za-z ' 012'>alice-words'' として作った。つまりアルファベット以外の
文字の連なりを改行に変換した。) 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
- 日本語の文字コード(漢字コード)の変換をする。
- -e 日本語 EUC に変換する。
- -s シフト・ジスに変換する。
- -j JIS 漢字コードに変換する。
 次のようにすると DOS や Windows パソコンで作ったテキスト・ファイルを
情報科学センターのワークステーションで利用できるようになる (文字コード
を日本語 EUC に変換し、CR, C-z (032) を削除する。)。
		nkf -ed ファイル名  | tr -d " 032" > 新しいファイル名 032" > 新しいファイル名
 また、逆にワークステーションで作ったテキスト・ファイルは
		nkf -sc ファイル名 > 新しいファイル名
 で Windows で使えるようになる (文字コードを、シフトJISに変換し、
行末に CR をつける)。
 (ただし、テキスト・ファイルの形式の変換の目的だけならば qkc とい
うコマンドが便利かも知れない。
qkc -eu ファイル名 でワークステーション形式に、
qkc -ms ファイル名 で Winwos 形式になる。)
- sed
- 文字列の置換など、指示に従って編集するコマンド。
 
 
 
 
 
   
 Next: awk
 Up: UNIX のテキスト・ファイル文化
 Previous: 標準入出力のリダイレクション、パイプ
Masashi Katsurada
平成10年7月2日