Next: 1.3 awk
Up: 1. UNIX のテキスト・ファイル処理
Previous: 1.1 標準入出力のリダイレクション、パイプ
まず以下の準備をしてから、その後の操作をしよう。
(tcsh の設定がまだの人は、tcsh とタイプして、
tcsh を起動してから実習を始めて下さい。)
isc-xas06% cd
|
← ホームディレクトリィに移動する。 |
isc-xas06% tcsh
|
← tcsh を実行する。 |
isc-xas06% mkdir filter
|
← filter という名前のディレクトリィを作る。 |
isc-xas06% cd filter
|
← filter に移動する。 |
isc-xas06% ln -s ~re00018/gutenberg/* .
|
← ~re00018/gutenberg にあるファイルに
シンボリック・ |
|
リンクを張る。 |
isc-xas06% ls
|
← どういうファイルがあるか、確認する。 |
|
→ alice29.txt などのファイル名が見えるはず。 |
isc-xas06% cat LIST
|
← LIST の中身を見る。
|
|
今回配布したファイル (以下では Gutenberg テキストと呼ぶことにする)
の出所については、付録 A. 「古典 (文書) の電子化」を参照してほしい。
UNIX システムでは、標準入出力のリダイレクション、
パイプ機能を活用するため、
標準入力から入力し、標準出力に出力し、他の入出力は使わないで済む
というコマンドが多い。
このようなプログラムをフィルターと呼ぶ。
フィルターは簡単な機能しか持たないものが多いが
複数のフィルターをパイプで接続して複雑な仕事が出来る
ようになっている3。
以下、UNIX の代表的なフィルターをいくつか紹介する。
- grep
- テキスト・ファイルから指定した文字列を検索して、それを含む行を表示す
る。
検索に用いるパターンの指定には、
正規表現 (regular
expression4) と呼ばれる形式が利用できる
(grep の名前の由来は
global/regular-expression/print)。
- grep パターン 検索したいファイル名
が基本的な使い方。
- -v とすると、パターンを含まない行を表示する。
- -i とすると、大文字・小文字を区別しないで検索する。
- sort
- テキストファイルを行単位で、順序付けて(通常はアルファベット順に)並
べ変える。
- -r 逆順に並べる。
- -n 数値としての大小で並べ変える。
- + ( は整数) 第 フィールドの要素の大小で並べる。
例えば、
(ここでは
ls -l ~
の出力の第5フィールドはファイルのサイズである、
と仮定している。)
- wc
- テキスト・ファイル中の行数、単語数、文字数を数える。
- uniq
- 連続する同じ内容の行を1つにまとめる。
-c とすると、同じ行が何行続いたか表示する。次の例は、
今回のハイライトとも言える凝った例である。
一体何をやっているのか? 一段一段確認しながらチェックしよう。
長い
コマンドはシェル・スクリプト5 にすると便利である。
- /usr/ucb/tr
- 文字単位の置換、削除を行う。
/usr/ucb/tr [-cds] [文字列1 [文字列2]]
- -d は削除することを表す。
- -s は同じ字が連続した場合、一字に置換することを表す。
- -c はパターンに含まれない文字を対象にする。
パターンには文字コードを 8 進数で指定できる (以下の例を参照)
6 。また文字の範囲を - で指定できる。
A-Z で `A' から `Z' までの文字 (つまり英大文字) を表
す。
以下で /usr/ucb/tr と長く打つのが面倒と思う人は、最初に
set path=(/usr/ucb $path) としておくと、
以下は単に tr とすることができる。
上記の alice-words というファイルは次のようにして作った
(つまりアルファベット以外の文字の連なりを改行に変換した)。
だから、単語の出現頻度表を得るために、次のようにすることもできる。
isc-xas06%
cat alice29.txt | /usr/ucb/tr -cs A-Za-z '\012' | sort |
uniq -c | sort -n
|
(こんなに長いコマンドは打つ気になれない?
いざとなったらシェル・スクリプト!)
- head
- 最初の数行のみ表示するコマンド。
オプションを指定しないと最初の 10 行を表示する。
- とすると最初の 行を表示する。
isc-xas06% head -30 /usr/dict/words
← /usr/dict/word の先頭から 行を表示する。
|
(/usr/dict/words は英単語を納めたファイルである。)
- tail
- テキストの最後の方を表示するコマンド。
オプションを何も指定しないと 10 行のみ表示する。 - とすると
最後の 行を表示する。+ とすると、最初の 行を除いた残
りを表示する。
isc-xas06% cat sawyr10.txt | tail -30
← sawyr10.txt の最後の 30 行を表示する。
|
- nkf
- 日本語の文字コード(漢字コード)の変換をする。
(nkf については、
前回のプリントに最低限のことは説明したので、ここでは略する。)
Next: 1.3 awk
Up: 1. UNIX のテキスト・ファイル処理
Previous: 1.1 標準入出力のリダイレクション、パイプ
Masashi Katsurada
平成14年5月30日