[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

7. ソートされたファイルの処理

以下のコマンドは,ソートされたファイルで動作する(あるいはそれを生成す る)コマンドです.


[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

7.1 sort: テキストファイルをソート

sortは,与えられたファイル,または与えられない場合や, ‘-’のfileの場合は標準入力からの全ての行を,ソート,統合,ま たは比較します.デフォルトで,sortは結果を標準出力に書き出し ます.概要です.

 
sort [option]… [file]…

sortは,処理時に三つのモードがあります.ソート(デフォルト), 統合,そしてソートされてることの調査です.以下のオプションで処理モード を変更します.

-c
--check

与えられたファイルが,すでにソートされているかどうか調査します.全てが ソートされていない場合,エラーメッセージを出力し,1のステータスで終了 します.それ以外の場合は正常に終了します.

-m
--merge

与えられたファイルを,グループ化してソートすることで,統合します.それ ぞれの入力ファイルは,個別にソートされている必要があります.それは常に, 統合ではなくソートのために動作します.統合は,それが動作する状況ではよ り高速なため提供されています.

行の組は,以下のように比較されます.キーフィールドが指定された場合, sortは,それぞれのフィールドの組を,コマンドラインで指定され た順番で,関連する順序オプションで,差が見つかるまで,またはフィールド の残りが無くなるまで比較します.指定されない場合は,すべて比較する際, LC_COLLATEロカールで指定された,文字の順番を使用します. (2)

大域的なオプション‘bdfgiMnr’が与えられて,キーフィールドが指定さ れていない場合,sortは大域的なオプションに従い,行全体を比較 します.

最終的に,全てのキーが同じとき(または,順序オプションが全く指定されて いない場合),最後の手段として,sortは行全体を比較します.最 後の手段は,‘--reverse’(‘-r’)の大域的なオプションを尊重 して比較します.‘--stable’(‘-s’)オプションは,この最後の 手段では利用できず,それは,全てのフィールドの比較が同じになる行は,元 の相対的な順序のままにするためです.フィールドや大域的なオプションが指 定されない場合,‘--stable’(‘-s’)は効果がありません.

GNU sortは,(全てのGNUユーティリティで指定されるよ うに)入力行の長さの制限や,行で許可されるバイト数の限界がありません. 更に,入力ファイルの最終バイトが改行でない場合,GNU sortは,黙ってそれを供給します.行の後ろの改行は,比較の目的 では行の一部です.

終了ステータスは以下のようになります.

 
0 エラーがない場合
1 ‘-c’オプションとともに呼び出され,入力が適切にソートされていない場合
2 エラーが生じた場合

環境変数TMPDIRが設定されている場合,sortは,一時ファイ ルのディレクトリとして,‘/tmp’の代わりにその変数をディレクトリと して使用します.‘--temporary-directory’(‘-T’)オプション は,順序的に環境変数に優先します.

以下のオプションは,出力行の順序に影響します.それらは,大域的,または キーフィールドの一部として指定してもかまいません.キーフィールドが指定 されていない場合,大域的なオプションは行全体の比較に対して適用されます. それ以外では,大域的なオプションは,それ自身オプションが指定されていな いキーフィールドに継承されます.以前のPOSIXのバージョンの sortでは,大域的なオプションはキーフィールドだけに影響するの で,移植性の高いシェルスクリプトでは大域的なオプションを最初に指定すべ きです.

-b
--ignore-leading-blanks

それぞれの行でソートするキーを探すとき,前の空白を無視します. LC_CTYPEロカールで文字形式を決定します.

-d
--dictionary-order

phone directoryの順序でソートします.ソート時に,文字,数字,そ して空白以外の全ての文字は無視されます.LC_CTYPEロカールで文字形 式を決定します.

-f
--ignore-case

比較時に,小文字を大文字と同じに扱い,例えば,‘b’と‘B’は同等 にソートされます.LC_CTYPEロカールで文字形式を決定します.

-g
--general-numeric-sort

それぞれの行のプレフィクスを倍精度浮動小数点の数に変換するため,標準C 関数strtodを使用し,数値的なソートをします.これで, 1.0e-3410e100のような浮動小数点の数を,科学的な表記方 で指定できます.LC_NUMERICロカールで小数点文字を決定します.オー バーフローや,アンダーフロー,変換エラーは報告しません.以下の順番を使 用します.

他に選択肢が無い場合のみ,このオプションを使用してください. ‘--numeric-sort’(‘-n’)よりはるかに遅く,浮動小数点に変換 するとき,情報を失うはずです.

-i
--ignore-nonprinting

印刷不可能な文字を無視します.LC_CTYPEロカールで文字形式を決定し ます.このオプションは,より強力な‘--dictionary-order’ (‘-d’)オプションも与えられている場合,効果がありません.

-M
--month-sort

任意の量の空白から成り立つ最初の文字列に月の名前の省略が続くものは,大 文字のまま保持され,‘JAN’ < ‘FEB’ < … < ‘DEC’の順 に比較されます.無効な名前は,有効な名前の下になります.LC_TIME ロカールで,月のつづりを決定します.

-n
--numeric-sort

数値的なソートです.数字でそれぞれの行を開始します.特に,オプションの 空白,オプションの‘-’記号,そして,1000で区切られたり,小数点文字 とゼロ以上の桁を続けることが可能な,ゼロ以上の桁から成り立ちます. LC_NUMERICロカールで,小数点文字と1000の区切りを指定します.

数値的なソートは,浮動小数点の数値を表現する文字列を比較するため,慣習 的とは思われない手法を使用します.最初にそれぞれの文字列をCの double形式に変換してそれらの値を比較するのではなく, sortは,二つの文字列の小数点文字を一列に並べて,一度に文字の 列を比較します.このアプローチを使う一つの利益は速度です.実際には,二 つの対応する文字列を倍精度浮動小数点に(または,文字列を整数に)変換し, 倍精度浮動小数点を比較するより効率的です.更に,精度による損失はありま せん.それぞれの文字列を比較前にdoubleに変換すると,ほとんどの システムで16桁程度に精度が制限されるでしょう.

前置される‘+’も,指数表記も認識されません.そのような文字列を数値 的に比較するために,‘-g’オプションを使用してください.

-r
--reverse

比較の結果を逆順にし,より大きなキー値を持つ行が,出力では後方なるので はなく,前方に現われるようになります.

その他のオプションは以下の通りです.

-o output-file
--output=output-file

標準出力の代わりに,output-fileに出力を書き出します.必要があれ ば,sortoutput-fileを開く前に入力を読み込むので, sort -o F Fcat F | sort -o Fのようなコマンドを使用する ことで,同じファイルを安全にソートすることが可能です.

より新しいシステムでは,POSIXLY_CORRECTが設定されている場合, ‘-o’を入力ファイルの後に書くことができません.例えば, ‘sort F -o F’です.移植性の高いスクリプトでは,すべての入力ファイ ルの前に‘-o output-file’を指定すべきです.

-s
--stable

条件によっては実行される最後の手段の比較を利用不可能にし, sortを安定させます.デフォルトで,コマンドラインオプションに よって影響する順番として行の比較が同じになるとき,行全体をキーとして, 順序付けオプションが指定されていない状態で,最後の手段の比較 (last-resort comparison)を使用して,これらの行に順番を付けます.しか し,順序指定として‘--reverse’ (‘-r’)が指定されている場合, 最後の手段の比較は‘--reverse’を使用します.あらゆる状況で,順序 付けオプションが指定されていないときや,‘--reverse’だけが指定さ れているとき,最後の手段の比較は実行されません.

-S size
--buffer-size=size

与えられたsizeのメインメモリのソートバッファを使用します.デフォ ルトで,sizeは1024バイト単位です.‘%’を追加すると, sizeを物理メモリのパーセントとして解釈します.‘K’を追加する と,sizeを1024倍(デフォルト)にし,‘M’は1,048,576倍, ‘G’は1,073,741,824倍などのようになり,以下‘T’,‘P’, ‘E’,‘Z’,そして‘Y’も同様です.‘b’を追加すると, sizeは倍数表現ではなくバイト数として解釈されます.

このオプションで,デフォルトより大きいまたは小さいソートバッファを用い て開始させることで,sortのパフォーマンスの改善することが可能 です.しかし,このオプションは初期のバッファサイズだけに影響します. sizeより大きな入力行をsortが見つけた場合,バッファは size以上に大きくなります.

-t separator
--field-separator=separator

それぞれの行からソートキーを検索するとき,フィールドセパレータとして, 文字separatorを使用します.デフォルトで,フィールドは,空白でな い文字と空白文字の間の空の文字列で分離されます.すなわち,入力行 ‘ foo bar’が与えられた場合,sortはそれを,フィール ド‘ foo’と‘ bar’に分離します.フィールドセパレータは, フィールドの前やフィールドの後の部分とは考えられません.しかし, ‘-k 2’のように行末まで展開されるソートフィールドや,‘-k 2,3’のように範囲があるソートフィールドは,範囲の終点に存在するフィール ドセパレータを保持します.

フィールド分離文字としてゼロバイト(ASCII NUL (Null)文字) を指定するために,二文字の文字列‘\0’,例えば‘sort -t '\0'’を 使用して下さい.

-T tempdir
--temporary-directory=tempdir

一時ファイルを保存するためディレクトリtempdirを使用し,それは TMPDIR環境変数に優先します.このオプションが一回以上与えられた場 合,一時ファイルはすべて与えられたディレクトリに保存されます.入出力が 拘束されるほどの大量のソートやマージを行なう場合,異なるディスクやコン トローラにあるディレクトリを指定するためにこのオプションを使用すること で,パフォーマンスが改善するはずです.

-u
--unique

通常,比較結果が等しい行の最初の行のみを出力します. ‘--check’(‘-c’)オプションに対し,比較結果が等しい連続し た行の対が無いことを調査します.

-k pos1[,pos2]
--key=pos1[,pos2]

pos1pos2(または,pos2が省略された場合は行末)の間か ら成り立つ,pos2含まれます,行の一部をソート時のフィー ルドに指定します.フィールドと文字の位置は,1から番号付けされます.そ のため,二番目のフィールドをソートするため,‘--key=2,2’ (‘-k 2,2’)を使用してください.以下により多くの例があります.

-z
--zero-terminated

入力を行の集合として扱い,ASCII LF (Line Feed)の代わり にゼロバイト(ASCII NUL (Null)文字)で終端します.このオ プションは,任意のパス名を(ラインフィード文字を含んでいても)確実に処理 するため,‘perl -0’や,‘find -print0’と‘xargs -0’と組み 合わせると便利です.

歴史的な(BSDとSystem Vの)sortの実装は,解釈が異なるオプショ ンがあり,特に,‘-b’,‘-f’と‘-n’があげられます. GNU sortは,POSIXの動作に従い,それは通常(常 にではない!)System Vの動作に似ています.POSIXによると, ‘-n’は,もはや‘-b’を暗黙に指定しません.一貫性のため, ‘-M’も同様に変更されました.これは,フィールドの指定が明確でな い状況で,文字の位置の意味に影響するかもしれません.唯一の訂正方法は, 明示的に‘-b’を加えることです.

-k’オプションを用いたソート時のフィールド指定の位置は, ‘f.c’形式となり,fは使用するフィールド数で, cはフィールドのはじまりから数えた最初の文字までの数です.最初の 位置として,‘.c’が省略されているとフィールドの最初の文字を 用います.‘-b’オプションが指定されている場合,指定したフィール ドの‘.c’ の部分は,フィールドの最初の空白ではない文字から数 えます.

ソートキーの位置は,オプション文字‘Mbdfinr’を加えてもかまわず,そ の場合,大域的な順序オプションは,特定のフィールドに使用されません. ‘-b’オプションは,指定した最初と最後のフィールドの一方または両 方に独立に適用され,大域的なオプションを継承する場合,両方に適用されま す.キーは複数のフィールドに跨ってもかまいません.

古いシステムでは,sortは時代遅れのソートキーを指定するゼロを 起点とした構文の‘+pos1 [-pos2]’をサポートしています. POSIX 1003.1-2001 (see section 標準への準拠)ではこれを 許可していません.代わりに‘-k’を使用してください.

様々なオプションの組合せを紹介する例は以下のようになります.


[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

7.2 uniq: ファイルのユニーク化

uniqは与えられたファイル,または与えられない場合や‘-’の input名に対し,ユニークな行を書き出します.概要です.

 
uniq [option]… [input [output]]

デフォルトでuniqはその入力行を出力し,そして,出力行が繰り返 さないように隣接した繰り返している行の最初のものだけを出力します.オプ ションで,そうする代わりに,繰り返さない行を表示しない,さらに,すべて の繰り返し行を表示することも可能です.

入力ファイルはソートされている必要はありませんが,繰り返している行は隣 接している場合のみ検出されます.隣接していないものを除去したい場合,お そらくsort -uを使用したいと思うでしょう.

比較には,LC_COLLATEロカールカテゴリで指定された文字の順番を使用 します.

outputファイルが無い場合,uniqは標準出力に書き出します.

このプログラムは,以下のオプションも受け入れます.共通のオプション も参照してください.

-f n
--skip-fields=n

ユニークさを調査する前に,それぞれの行のnフィールドスキップしま す.行がnフィールドより少ない場合,比較で空の文字列を使用します. フィールドは,少なくとも一つ以上のスペースやタブで区切られた,非スペー ス,非タブ文字の並びです.

古いシステムでは,uniqは時代遅れのオプション ‘-n’をサポートしています.POSIX 1003.1-2001 (see section 標準への準拠)ではこれを許可していません.代わりに ‘-f n’を使用してください.

-s n
--skip-chars=n

ユニークさの調査の前に,n文字スキップします.行がn文字より 少ない場合,比較で空の文字列を使用します.フィールドと文字のスキップオ プションを両方とも使用した場合,フィールドが最初にスキップされます.

古いシステムでは,uniqは時代遅れのオプション ‘+n’をサポートしています.POSIX 1003.1-2001 (see section 標準への準拠)ではこれを許可していません.代わりに ‘-s n’を使用してください.

-c
--count

それぞれの行で同じものが発生した回数を出力します.

-i
--ignore-case

行の比較時に大文字小文字の違いを無視します.

-d
--repeated

繰り返しではない行を除外します.単独で使用しているとき,このオプション でuniqは繰り返している行の最初のものを出力し,それ以外は何も 出力しません.

-D
--all-repeated[=delimit-method]

繰り返している行の二番目とそれに続く行を除外しませんが,繰り返していな い行は除外します.このオプションは,主に他のオプションと組み合わせると 便利で,例えば,大文字小文字を無視したり,選択したフィールドのみを比較 する場合です.追加のdelimit-methodで繰り返している行の組を分ける 方法を伝え、それは以下の一つにする必要があります.

none

繰り返している行の組を分離しません.これは‘--all-repeated’ (‘-D’)と同じです.

prepend

それぞれの繰り返している行の組の前に改行を出力します.

separate

繰り返している行の組を単一の改行で分離します.これは,最初の組の前に改 行が無いこと以外‘prepend’を使用することと同じで,ユーザに直接出力 するためにはより適しているでしょう.

組が分離されていて,入力に二つ以上の空白行があるとき,出力が不明瞭にな ることに注意してください.それを避けるため,連続した改行を単一の改行に 置換するように,入力を‘tr -s '\n'’でフィルタリングしてください.

これは,GNUの拡張です.

-u
--unique

最初に繰り返している行を除外します.単独で使用しているとき,このオプショ ンでuniqはユニークな行を出力し,それ以外では何もしません.

-w n
--check-chars=n

(指定されたすべてのフィールドと文字をスキップした後)それぞれの行の最大 n文字を比較します.デフォルトで,行の残り全体が比較されます.

終了ステータスのゼロは成功を示し,ゼロ以外の値は失敗を示します.


[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

7.3 comm: 二つのソートされた行と行の比較

commは,二つの入力ファイルの共通の行とユニークな行を標準出力 に書き出します.‘-’のファイル名は標準入力を意味します.概要です.

 
comm [option]… file1 file2

commを使用する前に,LC_COLLATEロカールで指定された順番 に入力ファイルをソートする必要があります.入力ファイルが改行文字で終ら ない場合,改行は暗黙に付加されます.オプションを用いないsort コマンドは,commの入力に適したファイルを常に出力します.

オプションが無い場合,commは三列の出力を生成します.一列目は file1のユニークな行を含み,二列目はfile2のユニークな行を含 み,三列目は両方のファイルに共通な列を含みます.列は単一のTAB文字で分 離されます.

オプションの‘-1’,‘-2’,そして‘-3’は,対応する列 の出力を抑制します.共通のオプションも参照してください.

他の比較ユーティリティとは異なり,commは比較の結果に依存しな い終了ステータスがあります.上記の通常の比較では,commはゼロ のコードで終了します.エラーがあった場合,ゼロでないステータスで終了し ます.


[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

7.4 tsort: 位相幾何学的なソート

tsortは,位相幾何学的なソートを,与えられたfile,また は入力ファイルが与えられない場合や‘-’のファイルに対しては標準入力 で実行します.詳細とちょっとした歴史はtsort: 背景を参照して ください.概要です.

 
tsort [option] [file]

tsortは,その入力を文字列の組で,空白で分離されていて,不完 全な順序で示されているものとして読み込みます.出力は,与えられた不完全 な順序に対応する完全な順序になります.

例えば以下のようにします.

 
tsort <<EOF
a b c
d
e f
b c d e
EOF

これは以下の出力を生成します.

 
a
b
c
d
e
f

より現実的な例を考えてみましょう.一つのファイルに大きなすべての関数の セットがあり,一つ以外のすべてがスタティックに宣言されていると仮定しま す.現在,それ(いわゆるmain)はファイルの最初に定義されていて, それから直接呼び出されるものが続き,それらが呼び出すものがそれに続いて いる,といったようになっています.さて,プロトタイプの利点が決定すると, それらの関数の宣言(定義からのたくさんの情報が重複していることを意味し ます)の関係を選択し,それらが使用される前にできるだけ多くの関数の順番 を整理することになるでしょう,それ以降の処理を自動化する一つの方法とし て,直接呼ばれるそれぞれの関数のリストを入手することがあげられます.そ のようなリストを生成することが可能なプログラムはたくさんあります.それ らはグラフと呼ばれる物を記述します.それぞれの行で,左の関数が右の関数 を直接呼び出すことを示している以下のリストを考えてみましょう.

 
main parse_options
main tail_file
main tail_forever
tail_file pretty_name
tail_file write_header
tail_file tail
tail_forever recheck
tail_forever pretty_name
tail_forever write_header
tail_forever dump_remainder
tail tail_lines
tail tail_bytes
tail_lines start_lines
tail_lines dump_remainder
tail_lines file_lines
tail_lines pipe_lines
tail_bytes xlseek
tail_bytes start_bytes
tail_bytes dump_remainder
tail_bytes pipe_bytes
file_lines dump_remainder
recheck pretty_name

そのとき,要求を満足するようにそれらの関数の順番を生成するため, tsortを使用することが可能です.

 
example$ tsort call-graph | tac
dump_remainder
start_lines
file_lines
pipe_lines
xlseek
start_bytes
pipe_bytes
tail_lines
tail_bytes
pretty_name
write_header
tail
recheck
parse_options
tail_file
tail_forever
main

tsortは入力内の循環を検出し,出現した最初の循環部分を標準エ ラーに書き出します.

与えられた不完全な順序が,一般に唯一の完全な順序でないことに注意してく ださい.上記の例の状況では,関数parse_optionsは,mainの 前であればリストのどこにあってもかまいません.

オプションは,‘--help’と‘--version’のみです. See section 共通のオプション.


[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

7.5 tsort: 背景

tsortは,初期のUnixのバージョンのリンカで,アーカイブファイ ルを正確に一度だけ正しい順序で処理するために存在しています. ldはそれぞれのオブジェクトをアーカイブから読み出すので,プロ グラムで基本となるものが必要かどうか,リンク時に未定義のシンボルが定義 されているかどうかは明確です.

これは,アーカイブでの依存性を特別処理する必要があったことを意味します. 例えば,scanfはおそらくreadを呼び出します.それは,一度 アーカイブ全体を見渡すとき,scanf.oread.oの前に現れる ことが重要だということで,そうでなければ,scanfを呼び出している が,readを呼び出していないプログラムで,期待していない未解決の readへの参照に結局なってしまうからです.

この問題を解決する方法は,最初にオブジェクトファイル内の依存性を生成す ることです.これは,lorderと呼ばれるシェルスクリプトで行なわ れていました.GNUツールは,私の知る限りlorderを用いるバージョンを提供 していませんが,BSDの配布物ではまだ見つかるはずです.

lorderの出力でtsortを実行すると,アーカイブに追加 したオブジェクトの定義順を並べ替えた結果を使用することが可能になります.

1980年以降,Unixのアーカイブにはシンボル表が含まれていて(伝統的に ranlibで構築され,今ではar自身で構築されます), Unixのリンカは,アーカイブファイル全体を何回も効率的に処理するため,そ のシンボル表を使用するので,この一連の処理は時代遅れです.

いずれにせよ,こういうことでtsortは生まれました.古い問題を 解決するためにリンカがアーカイブファイルを処理する方法で,それは別の方 法で解決されています.

終了ステータスのゼロは成功を示し,ゼロ以外の値は失敗を示します.


[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

7.6 ptx: 並べ替えた索引の生成

ptxは,テキストファイルを読み込み,その内容のそれぞれのキー ワードを用いて,並べ替えられた索引を本来は生成します.呼び出しの形態は 以下の一つです.

 
ptx [option …] [file …]
ptx -G [option …] [input [output]]

-G’(または同等の: ‘--traditional’)オプションは,全ての GNU拡張を利用不可にし,伝統的なモードに切替えるので,いくつか制限 があり,そしてプログラムのオプションデフォルト値を変更します. ‘-G’が指定されていない場合,GNU拡張は常に利用可能です. ptxGNU拡張は,このドキュメントに適切に文章化されてい ます.完全なリストは,See section ptxGNU拡張.

個別のオプションは,以下のセクションで説明します.

GNU拡張が利用可能なとき,ゼロ,一つ,または複数のfileをオプ ションの後に続けてかまいません.fileが無い場合,プログラムは標準 入力から読み込みます.一つまたは複数fileある場合,全ての入力ファ イルが連結されているかのように,順番に全て読み込まれる入力ファイル名に なります.しかし,それぞれのファイルの間に完全に文脈の終りが有り,自動 的な参照が要求されるとき,ファイル名と行番号は,入力ファイルの個別のテ キストを参照します.全ての状況で,プログラムは並べ替えられた索引を標準 出力に書き出します.

GNU拡張が利用可能でないとき,すなわち,伝統的なモードでプ ログラムが動作しているとき,ゼロ,一つ,または二つのパラメータをオプショ ンの後に続けてかまもいません.パラメータが無い場合,プログラムは標準入 力を読み込み,標準出力に並べ替えた索引を生成します.一つのパラメータの みの場合,それは標準入力の代わりに読み込まれるテキストinputを指 名します.二つのパラメータが与えられた場合,それらはそれぞれ,読み込ま れるinputファイル名と,生成するoutputファイル名を与えます. この場合,二番目のパラメータとして与えられるファイルの内容が壊れること に十分注意してください.この動作は,System V ptx互換 で規定されています.GNUの標準は,オプションで導入されない出力パラ メータを防止します.

あらゆるファイルは,オプション値や入力テキストファイルとして指 名され,単一のダッシュ-を使用でき,その場合は標準入力と考えられ ます.しかし,プログラムの呼び出しに一回以上,この慣習を使用する意味は ありません.


[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

7.6.1 一般的なオプション

-C
--copyright

著作権とコピー条件の短いメモを出力し,それ以上何も処理せず終了します.

-G
--traditional

既に拡張されているので,このオプションは,ptxに対する全ての GNU拡張を利用不可にし,伝統的なモードに切替えます.

--help

短いヘルプを標準出力に出力し,それ以上何も処理せず終了します.

--version

プログラムのバージョンを標準出力に出力し,それ以上何も処理せずに終了し ます.

終了ステータスのゼロは成功を示し,ゼロ以外の値は失敗を示します.


[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

7.6.2 文字セットの選択

現在セットアップされているので,プログラムは,入力ファイルが8ビット ISO-8859-1コードを使用して符号化されていると考え,Latin-1文字セットだ ということも分かりますが,それは,MS-DOSでコンパイルされていない 場合で,その場合はIBM-PCの文字セットを使用します.(GNU ptxを,より小さいMS-DOSマシンで動作させる方法が分かりません.) 7-bit ASCIIとは異なり,文字である文字セットは別物です.これ は正規表現のマッチの動作を変更します.そのため,キーワードに対するデフォ ルトの正規表現で,外国や発音記号の文字が可能となります.しかし,キーワー ドのソートはそのままです.それは,全く盲目的に基礎的な文字セットの順序 に従います.

-f
--ignore-case

ソートに対し,小文字を大文字にまとめます.


[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

7.6.3 単語の選択と入力の処理

-b file
--break-file=file

このオプションは,単語を生成する文字の記述方法(‘-W’)の代替物を 提供します.それは,単語の部分にならない文字のリストを含むファイル名を 導入し,このファイルはブレークファイル(Break file)と呼ばれます. ブレークファイルの一部でないあらゆる文字は単語の要素です.‘-b’ と‘-W’を両方指定した場合,‘-W’が優先され‘-b’は無 視されます.

GNU拡張が利用可能な場合,改行をブレーク文字とすることを避ける唯一 の方法で,ファイルの終りにさえ改行が全く無いファイルに,全てのブレーク 文字を書くことでできます.GNU拡張が利用不可能な場合,スペース,タ ブ,そして改行は,ブレークファイルに含まれていない場合でも,常にブレー ク文字だと考慮されます.

-i file
--ignore-file=file

このオプションで関連付けられたファイルは,用語索引の出力でキーワードと されない単語のリストを含みます.それは無視ファイル(Ignore file) と呼ばれます.ファイルは,正確にそれぞれの行に一単語を含みます.単語を 分ける行の終りは,‘-S’オプションの値を適用されません.

このオプションが指定されない場合,デフォルトの無視ファイルが ptxで使用され,インストール時に変更されていない場合,通常は ‘/usr/local/lib/eign’で見つかります.デフォルトの無視ファイルの影 響を無くしたい場合,代わりに/dev/nullを指定してください.

-o file
--only-file=file

このオプションで関連付けられたファイルは,用語索引の出力に維持される単 語のリストを含み,このファイルで述べていないあらゆる単語は無視されます. ファイルはオンリーファイル(Only file)と呼ばれています.ファイル は,正確にそれぞれの行に一単語を含みます.単語を分ける行の終りは, ‘-S’オプションの値を適用されません.

オンリーファイルにデフォルトはありません.オンリーファイルと無視ファイ ルの両方にある場合,オンリーファイルで与えられ,無視ファイルで与えられ ない単語のみキーワードに適用されます.

-r
--references

それぞれの入力行で,空白文字でない前置された並びは,結果として得られる 並べ替えされた索引で,この入力行を識別する目的の参照として受け取られま す.参照生成に関するより多くの情報は,See section 出力の書式. このオプションの使用で,オプション‘-S’に対するデフォルト値を変 更します.

このオプションを使用すると,プログラムは出力の文脈からの参照の削除の試 みが非常に難しくなりますが,文脈の終りが正確に改行で終るとき, そうすることに成功します.オプション‘-r’が‘-S’デフォルト 値とともに使用された場合や,GNU拡張が利用不可能なとき,この条件は 常に満たされ,参照は完全に出力文脈から除外されます.

-S regexp
--sentence-regexp=regexp

このオプションは,行末や文の終りを記述する正規表現を選択します.実際, この正規表現の効果以外に,行末や文の終わりのには他の区別があり,入力行 の境界は,このオプションの外で特別な重要性はありません.デフォルトで, GNU拡張が使用可能なときや,‘-r’オプションが使用されていな い場合,文の終りが使用されます.この場合,正確なregexGNU emacsから取り込まれます.

 
[.?!][]\"')}]*\\($\\|\t\\|  \\)[ \t\n]*

GNU拡張が使用不可能なときや,‘-r’オプションが使用されてい る場合は,常に行の終りが使用され,この場合デフォルトのregexpは以 下のようになります.

 
\n

空のregexpの使用は,行末と文の終りの認識を完全に不可能にすること と同等です.この場合,ファイル全体が単一の大きな行や文と考えられます. ユーザは,オプション‘-F ""’を通じて,全ての切り詰めフラグの生成を, 不許可にしたい場合もあります.See (emacs)Regexps section ‘Syntax of Regular Expressions’ in The GNU Emacs Manual.

キーワードが入力行や文の最初で発生したとき,出力文脈の行の最初に,利用 されない領域を作成することもよくあります.キーワードが入力行や文の終り 近くで発生したとき,出力文脈の行の終りに利用されない領域を作成すること もよくあります.プログラムは,その中の文脈の周りを包むことで,それらの 領域を補充しようとします.入力行や文の頭は,出力行の右の利用されていな い行を補充するために使用されます.

ユーザの利便性の問題として,C言語で見つかる,通常のバックスラッシュさ れたエスケープ・シーケンスは認識され,ptx自身によって対応す る文字に変換されます.

-W regexp
--word-regexp=regexp

このオプションは,それぞれのキーワードを記述している正規表現を選択しま す.デフォルトで,GNU拡張が利用可能な場合,単語は文字の並びです. 使用されるregexpは‘\w+’です.GNU拡張が利用不可能な場合, 単語はデフォルトで,スペース,タブ,または改行で終るあらゆるものです. 使用されるregexpは‘[^ \t\n]+’です.

空のregexpは,このオプションを使用しないのと同等で,デフォルト動 作になります.See (emacs)Regexps section ‘Syntax of Regular Expressions’ in The GNU Emacs Manual.

ユーザの利便性の問題として,C言語で見つかる,多くの通常のバックスラッ シュされたエスケープ・シーケンスは認識され,ptx自身によって 対応する文字に変換されます.


[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

7.6.4 出力の書式

出力書式は,主に‘-O’と‘-T’オプションで制御され,それは以 下の表で記述されています.‘-O’も‘-T’も選択されていないと きで,GNU拡張が利用可能な場合,プログラムはdumb端末に適した出力書 式を選択します.それぞれのキーワードの生成は,出力を行の中心にし,周り をその左右の文脈で囲います.それぞれのフィールドは適切で正しいものなの で,用語索引の出力を容易に観察することが可能です.特別な特徴として,自 動的な参照がオプション‘-A’で指定されていて,左の文脈の前に出力 されている,すなわち,オプション‘-R’が選択されていない場 合,コロンが参照の後に追加されます.これは,GNU Emacsが next-errorを処理することでうまく作用します.このデフォルト出力 書式では,改行やタブのようなそれぞれの空白文字は,正確に一つのスペース に単に変換され,連続したスペースの圧縮は特に試みません.これは将来変更 されるかもしれません.これらの空白文字以外の,256文字の基本セットの全 ての他の文字は逐語的に転送されます.

出力書式は,以下のオプションで更に制御されます.

-g number
--gap-size=number

出力行のフィールド間の最小の空白の隙間を選択します.

-w number
--width=number

それぞれの最終行の出力最大幅を選択します.参照が使用される場合, ‘-R’オプションの値に依存して,それらは出力最大幅に含められたり 省かれたりします.これらのオプションが選択されていない場合,すなわち, 参照が左の文脈の前に出力されるとき,出力最大幅は全ての参照の最大長まで 考慮されます.このオプションが選択された場合,すなわち,参照が右の文脈 の後に出力されるとき,出力最大幅は参照が使用するスペースの量も,前にあ る隙間も考慮されません.

-A
--auto-reference

自動的な参照を選択します.それぞれの入力行は,ファイル名と間に単一のコ ロンを用いた行の序数で作成された自動的な参照を持ちます.しかし,標準入 力が読み込まれているときは,ファイル名は空です.‘-A’と ‘-r’の両方が選択された場合,入力参照は読み込まれスキップされま すが,自動的な参照は出力時に利用され,それは入力参照に優先します.

-R
--right-side-refs

デフォルト出力書式で,オプション‘-R’が使用されていないとき,オ プション‘-r’や‘-A’の影響で生成されるあらゆる参照は,右の 文脈の後に,出力行の右端に与えられます.デフォルト出力書式で,オプショ ン‘-R’が指定された場合,参照は,左の文脈の前に,それぞれの出力 行の始めに代わりに与えられます.それ以外のあらゆる出力書式に対し, ‘-R’が選択されたときは常に,参照の幅が‘-w’で与えられた全 体の出力幅に含まれないという事実以外,オプション‘-R’はほ とんど無視されます.

GNU拡張が利用不可能なときは,常にこのオプションは自動的に選択され ます.

-F string
--flac-truncation=string

このオプションは,文字列stringの使用が報告された出力での,あらゆ る切り詰めを要求します.ほとんどの出力フィールドは,オプション ‘-S’が選択されたのと同様に,現在の行や現在の文の始めや終りに向 かって,理論的に展開されます.しかし,許可される出力行幅の最大値は存在 し,それはオプション‘-w’で変更でき,そしてそれは様々な出力フィー ルドに対しスペースで更に分割されます.現在の行に適するように,その行の 最初や終りまで伸ばすことができないためフィールドを切り詰める必要がある とき,切り詰めが発生します.デフォルトで,使用される文字列は単一のスラッ シュで,‘-F /’のようになります.

stringは一文字以上が可能で,‘-F ...’のようになります.また, stringが空(‘-F ""’)となる特定の場合,切り詰めフラグは利用不 可能で,切り詰めマークはこの場合は現われません.

ユーザの利便性の問題として,多くの通常の,C言語で見つかる,バックスペー スされたエスケープシーケンスは認識され,ptx自身によって,対 応する文字に変換されます.

-M string
--macro-name=string

nrofftroffやTeXに適した出力を生成している間, ‘xx’の代わりに,使用する他のstringを選択します.

-O
--format=roff

nrofftroffの処理に適した出力書式を選択します.それぞれ の出力行は以下のようになります.

 
.xx "tail" "before" "keyword_and_after" "head" "ref"

それで,出力の植字を処理するための,‘.xx’ roffマクロを書くことが 可能になります.GNU拡張が利用不可能な場合,これはデフォルト出力で す.オプション‘-M’は,‘xx’を他のマクロ名に変更するために使 用することが可能です.

この出力形式で,改行やタブのような,表示不可能なそれぞれの文字は,連続 したスペースを圧縮するという特別な試みを行わず,正確に一つのスペースに 単に変換されます.それぞれの引用文字:"は二重になるので, nrofftroffで正しく処理されます.

-T
--format=tex

TeXでの処理に適した出力書式を選択します.それぞれの出力行は以下のよ うになります.

 
\xx {tail}{before}{keyword}{after}{head}{ref}

それで,出力の植字の処理するための\xx定義を書くことが可能になり ます.参照が生成されないとき,すなはち,オプション‘-A’もオプショ ン‘-r’も選択されていないとき,それぞれの\xxの最後のパラ メータが抑制されることに注意してください.オプション‘-M’は, ‘xx’を他のマクロ名に変更するために利用可能です.

この出力書式では,$%&#そして_のよ うないくつかの特殊文字は,自動的にバックスラッシュで保護されます.弓カッ コの{}もバックスラッシュで保護されますが,(数学モード を強制する)ドル記号の組でも囲まれます.バックスラッシュ自身は \backslash{}の並びを生成します.曲折アクセント記号とティルデ 分音記号は,^\{ }~\{ }の並びをそれぞれ生成します. その他の基礎となる文字セットの分音文字は,適切なTeXの並びを可能な限 り生成します.改行とタブのようなその他の表示不可能な文字と, ASCIIではない全ての他の文字は,連続したスペースを圧縮すると いう特別な試みを行わず,一つのスペースに単に変換されます.これらの特殊 文字をTeXで処理する改善方法を知らせてください.


[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

7.6.5 ptxGNU拡張

このptxのバージョンには,System V ptxには存在しな いいくつかの特徴があります.これらの拡張された特徴は,他のコマンドライ ンオプションで優先されない場合,‘-G’コマンドラインオプションを 使用して抑制されます.GNU拡張には,優先で元に戻すことができないも のがあり,そのため,GNU拡張を気にする場合,簡単な規則で ‘-G’を避けるはずです.ここに,このプログラムとSystem V ptxの間の違いがあります.


[ << ] [ >> ]           [冒頭] [目次] [見出し] [ ? ]

この文書は新堂 安孝によって2009年9月22日texi2html 1.82を用いて生成されました。