Node:Introduction

はじめに

このマニュアルは不完全です.初心者に適した方法で,基本的な概念を説明しよ うとしていません.それゆえ,興味があればこのマニュアルの改善に係わってく ださい.GNUコミュニティ全体が利益を得るでしょう.

GNUテキストユーティリティーは,ほとんどPOSIX.2標準と互換性がありま す.

バグをbug-textutils@gnu.orgに報告してください.バージョンナン バー,マシンアーキテクチャ,入力ファイルと,バグの再現に必要なあらゆる情 報含めることを忘れないでください.入力と,期待したものと,得たものと,間 違っている理由です.diffは歓迎しますが,これは推測が難しいときもあるので, 問題の記述も含めてください.See Bugs.

このマニュアルは配布物のUNIX man page に基づいていて,それは,元々David MacKenzieによって書かれ,Jim Meyeringによって更新されました.元となる fmt man pageは,Ross Patersonによって書かれました.François Pinardは,Texinfoフォーマットへの最初の変換を行いました.Karl Berryは索 引の追加と,いくつかの再編成と,結果の編集を行いました.Richard Stallman は,全体的なプロセスに,彼のいつもの貴重な洞察を寄稿しました.


Node:Common options

共通のオプション

特定のオプションは,これらすべてのプログラムで利用可能です.それぞれのプ ログラムのために,同一の記述を書くのではなく,それらはここで記述されます. (実際,すべてのGNUプログラムが,これらのオプションを受け入れる(あるいは 受け入れるべき)です.)

これらのプログラムには,任意の文字列を引数として持つものもあります.その 場合,--help--versionは,1つあり,正確に1つのコマンドラ イン引数の場合のみ,オプションとして受け入れられます.


--help
すべての利用可能なオプションをリストアップした,使用法のメッセージを出力 し,正しく終了します.
--version
バージョンナンバーを出力して,正しく終了します.


Node:Output of entire files

ファイル全体の出力

これらのコマンドは,いくつかの方法で,できる限りファイルを変換しながら, ファイル全体を読み込み,そして書き出します.


Node:cat invocation, Next:, Up:Output of entire files

cat: ファイルを連結し書き込む

catは,それぞれのfile(-は標準入力を意味します)か,与 えられない場合は標準入力を,標準出力へコピーします.概要です.

cat [option] [file]...

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


-A
--show-all
-vET と同じです.
-B
--binary
MS-DOSとMS-Windowsのみで,ファイルをバイナリモードで読み書きします.デフォ ルトで,MS-DOS/MS-Windowsでのcatは,標準出力がファイルやパイプに リダイレクトされているときのみ,バイナリモードを使用します.このオプショ ンは優先されます.バイナリファイルのI/Oでは,catはファイルのコピー プログラムとして使用されることが多いので,それらの書式(DOSテキストとバイ ナリに対するUnixテキスト)を保つために使われます.(以下の)オプションには, ときとして元ファイルの内容が重要でないので,catにテキストモードで 読み書きさせるものもあります(例えば,行がcatで番号付けされるとき や行の終りに印を付けるとき).これは,これらのオプションがDOS/Windowsユー ザーが期待したように働くためのものです.例えば,DOS形式のテキストファイ ルは,テキストモードで読まれない場合,-bで空の行として扱われない, CR-LF というペアの文字を行末に持ちます.
-b
--number-nonblank
空白でない全ての出力行に,1で始まる番号を付けます.MS-DOSとMS-Windowsで は,このオプションで,catはテキストモードでファイルを読み書きしま す.
-e
-vE と同じです.
-E
--show-ends
それぞれの行末の後に$を表示します.MS-DOSとMS-Windowsでは,このオ プションで,catはテキストモードでファイルを読み書きします.
-n
--number
全ての出力行に,1で始まる番号を付けます.MS-DOSとMS-Windowsでは,この オプションで,catはテキストモードでファイルを読み書きします.
-s
--squeeze-blank
複数の隣接した空白行を,1行のブランク行に置換します.MS-DOSとMS-Windows では,このオプションで,catはテキストモードでファイルを読み書きし ます.
-t
-vTと同じです.
-T
--show-tabs
TAB文字を ^Iとして表示します.
-u
無視されます.Unix互換性のためです.
-v
--show-nonprinting
LFDとTAB以外のコントロール文字を,^表記法を使って表示し, M-を使ったハイビットセットを持っている文字に優先します.MS-DOSと MS-Windowsでは,このオプションで,catはDOSバイナリモードでファイ ルと標準入力を読むので,それぞれの行末のCR文字は表示されます.


Node:tac invocation, Next:, Previous:cat invocation, Up:Output of entire files

tac: 逆順にファイルを連結し書き込む

tacは,それぞれのfile(- は,標準入力を意味します)か, 与えられない場合は標準入力を,それぞれに分けられたレコード(デフォルトは 行)を,逆順に標準出力へコピーします.概要です.

tac [option]... [file]...

レコードは,文字列のインスタンス(デフォルトは改行)で分けられていま す.デフォルトで,このセパレータ文字列はファイルに続くレコードの終りに付 加されます.

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


-b
--before
セパレータを,ファイルの前の,レコードの最初に付加します.
-r
--regex
セパレータ文字列を正規表現として扱います.MS-DOS/MS-Windowsでtac ユーザは,tacはファイルをバイナリモードで読むので,テキストファイ ルのそれぞれの行は,UnixスタイルのLFの代わりにCR/LFのペアで終ることに注 意してください.
-s separator
--separator=separator
separatorを,改行の代わりに,セパレータ文字列として用います.


Node:nl invocation, Next:, Previous:tac invocation, Up:Output of entire files

nl: 行に番号を付けファイルに書き込む

nlは,それぞれのfile(- は標準入力を意味します)か,与 えられない場合は標準入力を,行のいくつか,または全てに行番号を加えて,標 準出力へ書き出します.概要です.

nl [option]... [file]...

nlは,入力を(論理)ページに分解します.デフォルトで,それぞれの論 理ページのトップで,行番号は1にリセットされます.nlは,全ての入力 ファイルを単一のドキュメントとして扱います.行番号や論理ページをファイル 間でリセットしません.

論理ページは,3つのセクションから成立ちます.ヘッダとボディとフッタです. あらゆるセクションは,空にすることもできます.それぞれは,異なるスタイル で番号を付けられます.

論理ページのセクションの最初は,以下のデリミタ文字列の1つを,入力ファイ ルに単一行で含めることで示されます.

\:\:\:
ヘッダの始まり.
\:\:
ボディの始まり
\:
フッタの始まり.

これらの文字列を構成する2つの文字は,\:からの変更はオプ ション(以下を参照)で可能ですが,パターンと文字列の長さは変更できません.

セクションデリミタは,出力では空行に置換されます.入力ファイルの,最初の セクションのデリミタ文字列より前のあらゆるテキストは,ボディセクションの 一部と考えられるので,nlは,セクションデリミタが無いファイルを,1 つのボディセクションとして扱います.

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


-b style
--body-numbering=style
それぞれの論理ページのボディセクションの行に対し,番号付けのスタイルを選 択します.行が番号付けされないとき,現在の行番号は増加しませんが,行番号 を分ける文字列は行に前置されます.スタイルは以下のとおりです.
a
全ての行に番号を付けます.
t
(デフォルトでボディに対し)空でない行だけ,番号を付けます.
n
(デフォルトでヘッダやフッタに対し)番号を付けません.
pregexp
regexpに一致したものを含む行だけ番号を付けます.

-d cd
--section-delimiter=cd
セクションデリミタ文字をcdにセットします.デフォルトは\:で す.cのみ与えられた場合,2番目の:はそのままです.(シェルが 拡張する\や他のメタ文字を,引用符やバックスラッシュの追加で保護す ることを,忘れないでください.)
-f style
--footer-numbering=style
--body-numberingに似ています.
-h style
--header-numbering=style
--body-numberingに似ています.
-i number
--page-increment=number
行番号をnumberづつ(デフォルトは1)増加します.
-l number
--join-blank-lines=number
number(デフォルトは1)連続した空行を,番号付けに対し1つの論理行だと 考え,最後のもののみに番号付けします.numberより少ない行の連続した 空行があるところでは番号付けをしません.空行は,スペースやタグを含め,文 字を含まないものです.
-n format
--number-format=format
行の番号付けの書式を選択します(デフォルトはrnです).
ln
左寄せで,先頭の0を置きません.
rn
右寄せで,先頭の0を置きません.
rz
右寄せで,先頭の0を置きます.

-p
--no-renumber
論理ページの最初で,行番号をリセットしません.
-s string
--number-separator=string
出力で,stringを使って(デフォルトはTAB文字)テキスト行と行番号を 分けます.
-v number
--starting-line-number=number
それぞれの論理ページの行番号の初期値を,number(デフォルトは1)にセッ トします.
-w number
--number-width=number
行番号に,number文字使います(デフォルトは6).


Node:od invocation, Previous:nl invocation, Up:Output of entire files

od: 8進やその他の書式でファイルを書き出す

odは,それぞれのfile(-は標準入力を意味します)か,与 えられない場合は標準入力の,明瞭な表現を書き込みます.概要です.

od [option]... [file]...
od -C [file] [[+]offset [[+]label]]

それぞれの出力行は,入力オフセットと,それに続くファイルデータのグループ から成り立ちます.デフォルトで,odは8進数でオフセットを出力し,そ れぞれのファイルのデータグループは,1つの8進数で出力された,入力の2バイ トです.

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


-A radix
--address-radix=radix
出力するファイルオフセットの基数を選択します.radixは,以下の1つが 使えます.
d
10進数.
o
8進数.
x
16進数.
n
なし(出力オフセットを出力しません).

デフォルトは8進数です.

-j bytes
--skip-bytes=bytes
書式化と書き出しの前に,入力バイトのbytesスキップします. bytes0x0Xで始まる場合,16進数と解釈されます.そ れ以外で,0で始まる場合は8進数.それ以外では10進数です.b の追加はbytesを512倍し,kは1024倍,そしてmは1048576 倍です.
-N bytes
--read-bytes=bytes
入力のbytesバイトを最大で出力します.bytesに対する接頭辞と 接尾子は,-jに対するものと同じように解釈されます.
-s [n]
--strings[=n]
通常の出力の代わりに,文字列定数のみを出力します.少なくとも n(デフォルトは3)個の連続したASCIIグラフィック文字で,それには null(ゼロ)バイトが続きます.
-t type
--format=type
ファイルデータの出力書式を選択します.typeは,以下の形式を示す文字 の1つ以上の文字列です.単一のtype文字列に,1つ以上の形式を示す文字 を含めたり,1回以上このオプションを使用した場合,odは,それぞれの 指定したデータ形式を用いて,それぞれの出力行のコピーを,指定した順番で書 き出します.

あらゆる形式指定の終りに"z"を加えることで,形式指定で生成された出力行 に,印刷可能な文字に存在するASCII文字の表示を加えます.

a
指名された文字,
c
ASCII文字,またはバックスラッシュエスケープ,
d
符号付き10進数,
f
浮動小数点,
o
8進数,
u
符号無し10進数,
x
16進数.

形式aは,スペースに対しsp,改行に対しnl,そして null(ゼロ)バイトに対しnul のようなものを出力します.形式c は,それぞれ \n,そして\0を出力します.

ac以外の形式に対し,それぞれの数字の解釈に使用するバイト 数を,以下の10進数の整数を伴う形式を示す文字で与えられたデータ形式で指定 することができます.また,以下の文字の1つを伴う以下の形式を示す文字で,C コンパイラ組込みのデータ形式を指定することもできます.整数(doux)に対しては以下のようになります.

C
char,
S
short,
I
int,
L
long.

浮動小数点(f)に対しては以下のようになります.

F
float,
D
double,
L
long double.

-v
--output-duplicates
同一の連続した行を出力します.デフォルトで,2行以上連続した出力行が同一 のとき,odは,最初の行のみ出力し,それ以下の行には,省略を示すた めアスタリスクを置くだけです.
-w[n]
--width[=n]
出力行毎に,n入力バイトをダンプします.それは,出力形式で指定した ものに関連するサイズの公倍数の倍数にする必要があります.nが偶数の 場合,デフォルトは32です.オプションが全く指定されていない場合,デフォル トは16です.

次のいくつかのオプションは,古いpre-POSIX書式の指定オプションを,対 応するPOSIX書式のスペックにマップします.GNU odは,古い形式 と新しい形式のオプションのあらゆる組合せを受け入れます.書式指定オプショ ンは蓄積されます.


-a
指名された文字として出力します.-taと同じです.
-b
8進数のバイトとして出力します.-toCと同じです.
-c
ASCII文字,またはバックスラッシュエスケープとして出力します. -tcと同じです.
-d
符号無しの10進数のshortとして出力します.-tu2と同じです.
-f
浮動小数点として出力します.-tfFと同じです.
-h
16進数のshortとして出力します.-tx2と同じです.
-i
10進数のshortとして出力します.-td2と同じです.
-l
10進数のlongとして出力します.-td4と同じです.
-o
8進数のshortとして出力します.-to2と同じです.
-x
16進数のshortとして出力します.-tx2と同じです.
-C
--traditional
古いodが受け入れる,pre-POSIXのオプション引数が無いものと認 識します.以下の構文です.
od --traditional [file] [[+]offset[.][b] [[+]label[.][b]]]

これは,最大1ファイルと,オプション引数で指定しているオフセットと疑似ス タートアドレス,labelを指定するために使用されるはずです.デフォル トで,offsetは,書式化と書き出しの前にスキップする入力バイトの量が, 8進数で指定されていると解釈されます.オプションで10進数の点を後置すると, offsetの解釈は強制的に10進数とします.10進数が指定されておらず,オ フセットが0x0Xで始まる場合,それは16進数として解釈されま す.bの後置がある場合,スキップされるバイト数はoffsetの512 倍になります.label引数は,offsetのように解釈されますが,そ れは初期の疑似アドレスを指定します.疑似アドレスは,通常のアドレスに続く カッコ内に表示されます.


Node:Formatting file contents

ファイルの内容の書式化

これらのコマンドは,ファイルの内容を再書式化します.


Node:fmt invocation, Next:, Up:Formatting file contents

fmt: 段落のテキストを再書式化する.

fmtは,与えられた(最大)文字数(デフォルトは75)の出力行を生成するた め,行を補充し繋げます.概要です.

fmt [option]... [file]...

fmtは,指定されたfile引数(または,与えられない場合は標準入 力)からファイルを読み込み,標準出力に書き出します.

デフォルトで,空白行,単語間のスペース,そして字下げは出力で維持されます. 異なる字下げのある連続した入力行は連結されません.タブは入力で展開され, 出力に差し込まれます.

fmtは,文の終りの改行しようとし,文の最初の単語の後や,文の最後の 単語の前での改行を避けようとします.文の切れ目は段落の終り,または, あらゆる.?!で終る単語に,2つのスペースか行の終りが続くものと定義 されていて,あらゆるカッコや引用符の内部は無視されます.TeXのように, fmtは,行の分割を選択する前に"段落"全体を読み込みます.アルゴリ ズムは"Breaking Paragraphs Into Lines(段落を行に区切る)"の変種です (Donald E. Knuth and Michael F. Plass, Software--Practice and Experience, 11 (1981), 1119-1184).

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


-c
--crown-margin
Crown marginモード: 段落の最初の2行の字下げを保存し,それに続くそ れぞれの行の左の余白を,2行目の余白に揃えます.
-t
--tagged-paragraph
Tagged paragraphモード: crown marginモードに似ていますが,段落の最 初の行の字下が2行目の字下げと同じ場合,最初の行は1行の段落として扱われま す.
-s
--split-only
行の分割のみです.短い行を長い形式に連結しません.これはコードのサンプル 行と,その他の"書式化された"テキストを,醜く結合されることを妨げます.
-u
--uniform-spacing
スペースを統一します.単語の間のスペースを1つのスペースに,そして文の間 のスペースを2つのスペースに減らします.
-width
-w width
--width=width
出力ファイルをwidth文字(デフォルトは75)まで補充します.fmt は最初に,これより7%短い行にし,行の長さのバランスのための空間を与えよう とします.
-p prefix
--prefix=prefix
prefix (空白で始めることも可能です)で始まる行のみ,書式化を適用し ます.prefixと前置されたあらゆる空白は,書式化のため取り除かれ,それぞれ の出力行に再び取り付けられます.1つの使用方法は,ある種のプログラムのコ メントの書式化で,コードは変化されないままになります.


Node:pr invocation, Next:, Previous:fmt invocation, Up:Formatting file contents

pr: 印刷のためのファイルのページ化とコラム化

prは,それぞれのfile (-は標準入力を意味します),また は,与えられない場合は標準入力を,複数列の書式で,ページ化された任意の出 力で,標準出力に書き出します.オプションで,全てのfileを結合し,1 列毎に,並列に全てを出力します.概要です.

pr [option]... [file]...

デフォルトで,5行のヘッダがそれぞれのページに出力されます.日付,ファイ ル名,そしてページ番号がある行があり,後の2行は空白行です.また,5行の空 白行を持つフッタも出力します.-Fオプションで,3行のヘッダを出力し ます.2行の空白行は削除され,フッタは使用されません.両方の場合でのデフォ ルトのpage_lengthは,66行です.テキスト行のデフォルト数は56 (-Fが無い場合)から63 (-Fがある場合)まで変化します.ヘッダ のテキスト行は,yyyy-mm-dd HH:MM string Page nnnnという形式で, page_widthまで使用します.文字列は,ヘッダ文字列をセンタリングした ものになります.

入力でのフォームフィードは,出力で改ページとなります.複数のフォームフィー ドは空のページを生成します.

列は同じ幅で,オプションの文字列(デフォルトはspace)で分けられてい ます.複数列の出力では,-Jオプションを使用していない場合,行は常 にpage_width (デフォルトで72)で切り詰められます.単一列での出力は, デフォルトでは切り詰められません.その場合,行を切り詰めるため-W オプションを使用してください.

Including version 1.22i:

いくつかの小さなletter options (-s-w)は,より良い posix遵守のオブジェクトにより再定義されています.それ以外の場合で のいくつかの出力は,他のunixに適合されました.下位互換性の侵害は受 け入れられました.

いくつかのnew capital letterオプション(-J-S-W)は,小文字のオプションの予期せぬインターフェースを取り消すため, 導入されました.-Nオプションと2番目の引数+FIRST_PAGElast_pageは,より多くの柔軟性を提供します.入力ファイルのフォーム フィード設定の詳細な取扱は,-Tオプションを要求します.

大文字のオプションは,小文字のものより優勢です.

いくつかのオプション引数(-s-S-e-i-nと比較して)は,(posix使用で既に述べられた)オプション文字 の前置から分かれている引数として指定できません.

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


+first_page[:last_page]
--pages=first_page[:last_page]
ページfirst_pageから出力を開始し,last_pageで停止します. :last_pageが無い場合は,ファイルの終りを暗示します.飛ばさ れたページ数を見積もる間,入力ファイルのそれぞれのフォームフィードは,結 果として新しいページになります.+first_pageがある場合と無い 場合のページの数え方は同じです.デフォルトで,入力ファイルの最初のページ でカウントを開始します(最初のページは出力されません).行の番号付けは, -Nオプションで変更できます.
-column
--columns=column
それぞれ単一ファイルで,column列(デフォルトで1)の出力を生成し, -aが使用されない場合は,列を下へ出力します.列の幅は, columnが増加するに従い,自動的に減少します.page_widthを増加 させるため,-W/-wを使用していない場合も同様です.このオプションは, いくつかの行を切り詰めるかも知れません.それぞれのページの列の行の数は平 均されます.オプション-e-iは,複数のテキスト列の出力のた めのものです.-Jをともに用いた場合,列の整列と行の切り詰めは停止 します.十分な長さの行は,フリーフィールド書式に組み込まれ,-Sオ プションはフィールドを分けるかも知れません.-column-mオプションとともに使用できません.
-a
--across
それぞれ単一fileを用い,列を下ではなく横切って出力します. -columnオプションは,1以上のcolumnで与える必要があり ます.列にフィットさせるには余りに長い場合,それは切り詰められます.
-c
--show-control-chars
ハット表記で(例えば,^G)を使用して制御文字を出力します.8進のバッ クスラッシュ表記で,その他の印刷不可能な文字を表示します.デフォルトで, 印刷不可能な文字は変更されません.
-d
--double-space
ダブルスペースを出力です.1
-e[in-tabchar[in-tabwidth]]
--expand-tabs[=in-tabchar[in-tabwidth]]
入力のtabをスペースに展開します.オプションの引数in-tabchar は,入力のタブ文字(デフォルトはTAB文字)です.2番目のオプション引数 in-tabwidthは,入力タブ文字の幅(デフォルトは8)です.
-f
-F
--form-feed
出力ページを分けるため,改行の代わりにフォームフィードを使用します.デフォ ルトページの長さの66行は,変更されません.しかし,ページ毎のテキスト行の 数はデフォルトの56から63行に変更されます.
-h HEADER
--header=HEADER
ヘッダのファイル名をセンタリングされた文字列headerで置換します.左 側の(*で印が付いた)切り詰めは,ヘッダ行全体のyyyy-mm-dd HH:MM HEADER Page nnnnpage_widthより大きくなった場合に発生する かも知れません.-h ""は空白行のヘッダを出力します.-h""を 使用しないでください.-hオプションと引数の間の空白は,常に不可欠 です.
-i[out-tabchar[out-tabwidth]]
--output-tabs[=out-tabchar[out-tabwidth]]
出力上で,スペースをtabに置換します.オプション引数 out-tabcharは出力されるタブ文字です(デフォルトはTAB文字です).2番 目のオプション引数out-tabwidthは出力されるタブ文字の幅(デフォルト で8)です.
-J
--join-lines
十分な長さの行に統合します.列オプション-column-a -column-mとともに使用されます.-W/-wの行の切り詰 めを停止します.列の整列は使用されません.-S[string]ととも に使用されるかもしれません.-Jは(-W-Sとともに),3 列オプションの古い(posix準拠の)オプション-w-sを解 決するために導入されました.
-l page_length
--length=page_length
ページの長さを,ヘッダ[とフッタ]の行を含めて,page_length行(デフォ ルトで66)に設定します.page_lengthが10以下(で-Fが3以下)の場 合,ヘッダとフッタは取り除かれ,入力ファイルの全てのフォームフィード設定 は,-Tオプションが指定されたかのように無視されます.
-m
--merge
全てのfileを並行に,それぞれの列に1つに統合し出力します.列にフィッ トさせるには行が長すぎる場合,それは切り詰められます.fileの(フォー ムフィード設定の)空のページは空の列を生成しますが,stringで印は付 いたままです.結果として,連続した行の番号付けと,統合されたファイル全体 を通じて印が付いた列になります.統合された完全に空のページは,区切りも行 番号もありません.デフォルトヘッダは,yyyy-mm-dd HH:MM <blanks> Page nnnnになります.中間の空白部分を満たすため,-h header を使用できます.
-n[number-separator[digits]]
--number-lines[=number-separator[digits]]
digits桁の行の番号付けを供給します(デフォルトのdigitsは5です). 複数列では,出力番号は,それぞれのテキスト列の最初のdigits列の位置 や,-m出力のそれぞれの行のみを占有します.単一列では,出力番号は それぞれの行に-mが行うように生成します.デフォルトの行のカウント の開始は,入力ファイルの最初の行で始まります(--pageオプションや -Nオプションと比べて,最初に印刷される行ではありません).オプショ ン引数number-separatorは,以下に続くテキストと分けるために行数に後 置される文字です.デフォルトの分離文字はTAB文字です.厳密な意味で,TABは 常に単一の列の出力としてのみ出力されます.TAB幅はTAB位置で変 化し,例えば,左のmargin-oオプションで指定された場合です. 複数列出力のプロパティは,equal width of output columns (posix指定)で与えられます.TAB幅は,最初の列の値で固定され, 左のmarginの値の違いでは変更されません.それは,固定数のスペースが 常にnumber-separator tabの位置に出力されることを意味します.タブ機 能は出力位置に依存します.
-N line_number
--first-line-number=line_number
最初のページに出力される最初の行(ほとんどの場合,入力ファイルの最初では ありません)を,数字のline_numberで行のカウントを開始します.
-o margin
--indent=margin
それぞれの行をmarginスペースのマージン幅(デフォルトはゼロ)で字下げ します.ページ全体の幅はマージンに-W/-wオプションの page_width設定を加えたものになります.数字付の単一列の出力 (-nオプションと比べて)では限定されたオーバーフローが発生するかも しれません.
-r
--no-file-warnings
引数fileが開けなかったとき,警告メッセージを出力しません.(しかし, 終了ステータスはゼロではありません.)
-s[char]
--separator[=char]
単一文字charで列を分けます.charのデフォルトは,-wno characterがなく,-wがある場合,TAB文字になります. -sが無い場合デフォルトの分離文字はspaceに設定されます. -s[char]は,-wが設定されていない場合,全ての3列オプション (-COLUMN|-a -COLUMN|-m)の行の切り詰めを停止します. それは,posix準拠の公式なものです.
-S[string]
--sep-string[=string]
出力の列を分けるためstringを使用します.-Sオプションは -sオプションと異なり,-W/-wオプションに対し効果がありませ ん.それは,行の切り詰めや列の整列に効果がありません.-Sが無く, -Jがある場合,prは,デフォルトの出力セパレータTABを使用し ます.-S-Jが無い場合,prspaceを使用しま す(-S" "と同じです).string無しで-Sを使用することは, -S""と同じです.prのオプションのいくつかに対し,単一文字の オプション文字に,対応する引数を直後に続ける必要があることに注意してくだ さい.空白を間に入れることはできません.-S/-sはその中の1つです. -S "STRING"とを使用しないでください.POSIXはこれを要求します.
-t
--omit-header
それぞれのページに,通常のヘッダ[とフッタ]を出力せず,ページの底まで補充 しません(空白行またはフォームフィードを用います).ページ構造は生成されま せんが,入力ファイルで設定されたフォームフィードは維持されます.前もって 定義されたページ化は変更されません.-t-Tは,他のオプショ ンとともに使用すると便利かもしれません.例えば,-t -e4は,入力ファ イルのTAB文字を4つのスペースに展開しますが,それ以外の変更を行いません. -tの使用は-hに優先します.
-T
--omit-pagination
ヘッダ[とフッタ]を出力しません.更に,入力ファイルのフォームフィード設定 から全て削除します.
-v
--show-nonprinting
出力できない文字を,8進のバックスラッシュ表記で出力します.
-w page_width
--width=page_width
複数のテキスト列出力に対してのみ,ページ幅をpage_width文字数に設定 します(page_widthのデフォルトは72です).-s[CHAR]は,デフォ ルトページ幅を停止し,あらゆる行は切り詰められ,列は整列されます.十分な 長さの行は,列オプションの設定にかかわらずマージされます. page_width設定が無い場合,おそらく単一列の出力になります. posix準拠の公式なものです.
-W page_width
--page_width=page_width
ページ幅をpage_width文字に設定します.それは列オプションによらず有 効です.-Jが使用されない場合,テキスト行は切り詰められます.3列オ プション(-column-a -columnまたは-m)の 1つとともに用いた場合,列の整列は常に使用されます.セパレータオプション の-S-sは,-Wオプションに効果はありません.デフォ ルトは72文字です.-W page_widthが無く,あらゆる列オプション が無い場合,行の切り詰めは行われません(下位互換を保つためと,よくある仕 事に合わせるために定義されています).それは,-W 72 -Jと同じです. -W page_widthに関係なく,行を溢れさせるのを防ぐため,ヘッダ 行は常に切り詰められます.


Node:fold invocation, Previous:pr invocation, Up:Formatting file contents

fold: 指定された幅に合わせるため,入力行を折り曲げる

foldは,それぞれのfile (-は標準入力を意味します)や, 与えられない場合は標準入力を,長い行を折曲げながら標準出力に書き出します. 概要です.

fold [option]... [file]...

デフォルトで,foldは80列以上の幅の行を折曲げます.出力は必要な行 数に分けられます.

foldはデフォルトで画面の列を数えます.こうして,タブは1列以上に数 えられ,バックスペースは列のカウント数を減らし,そして,キャリッジリター ンは列をゼロに設定します.

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


-b
--bytes
列ではなくバイトを数え,そのため,タブ,バックスペースと,キャリッジリター ンは,他の文字同様にそれぞれ1列カウント数を上げます.
-s
--spaces
単語の境界で改行します.列は最後の空白の後で,最大の列の長さの前で改行さ れます.そのような空白行を行が含まない場合,行は最大の行幅で通常通り改行 されます.
-w width
--width=width
80の代わりに,width列の最大行幅を使用します.


Node:Output of parts of files

ファイルの一部の出力

これらのコマンドは,入力の一部を出力します.


Node:head invocation, Next:, Up:Output of parts of files

head: ファイルの最初の部分を出力

headは,それぞれのfileの最初の部分(デフォルトで10行)出力し ます.ファイルが与えられない場合や,-というfileが与えられた ときは標準入力から読み込みます.概要です.

head [option]... [file]...
head -number [option]... [file]...

1つ以上のfileが指定された場合,headは以下から成り立つ1行の ヘッダを出力します.

==> file name <==

それはそれぞれのfileに対する出力の前になります.

headは2つのオプションの書式を受け入れます.新しいものは数字がオプ ションの引数になるもの(-q -n 1)で,古いものは数字があらゆるオプショ ン文字の前にあるもの(-1q)です.

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


-countoptions
このオプションは,最初に指定された場合のみ認識されます.countは10 進数で,-cオプションで単位文字(bkm)や, 行数を意味するl,そしてその他のオプション文字(cqv)が続きま す.
-c bytes
--bytes=bytes
最初の行の代わりに,最初のbytesバイトを出力します.後置される bbytesの512倍,kは1024倍,そしてmは1048576 倍になります.
-n n
--lines=n
最初のn行を出力します.
-q
--quiet
--silent
ファイル名のヘッダを出力しません.
-v
--verbose
常にファイル名のヘッダを出力します.


Node:tail invocation, Next:, Previous:head invocation, Up:Output of parts of files

tail: ファイルの最後の部分を出力

tailは,それぞれのfileの最後の部分(デフォルトで10行)出力し ます.ファイルが与えられない場合や,-というfileが与えられた ときは標準入力から読み込みます.概要です.

tail [option]... [file]...
tail -number [option]... [file]...
tail +number [option]... [file]...

1つ以上のfileが指定された場合,tailは以下から成り立つ1行の ヘッダを出力します.

==> file name <==

それはそれぞれのfileに対する出力の前になります.

GNU tail は,あらゆる量のデータを出力できます(tailの他のバー ジョンにはできないものもあります).ファイルを逆順にすることはファイルの 終りを出力する仕事と全く異なるので,-rオプション(逆順に出力)もあ りません.BSD tail (-rを伴うものの1つ)は,最大でそのバッファ の大きさまで,通常32kのファイルを逆順にすることが可能なだけです.ファイ ルを逆順にするより信頼性のある用途が広い方法は,GNU tacコマンドで す.

tailは2つのオプションの書式を受け入れます.新しいものは数字がオプ ションの引数になるもの(-n 1)で,古いものは数字があらゆるオプショ ン文字の前にあるもの(-1+1)です.

あらゆるオプション引数が,+で始まる数字nの場合,tail は,ファイルの終りの代わりに,それぞれのファイルの最初からn番目の 項目で出力を開始します.

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


-count
+count
このオプションは,最初に指定された場合のみ認識されます.countは10 進数で,-cオプションで単位文字(bkm)や, 行数を意味するl,そしてその他のオプション文字(cfqv)が続き ます.
-c bytes
--bytes=bytes
最後の行の代わりに,最後のbytesバイトを出力します.後置される bbytesの512倍,kは1024倍,そしてmは1048576 倍になります.
-f
--follow[=how]
おそらくファイルが増えているので,ファイルの終りで,それ以上の文字を読み 込むことを永久に繰り返します.このオプションは,パイプから読み込まれてい るとき,無視されます.1ファイル以上が与えられた場合,出力されてるファイ ルを示すため,異なるファイルから出力を得るときはいつでも,tailは ヘッダを出力します.

このオプションで,ファイルを追跡する方法を指定する方法が2つありますが, その違いは,続くファイルが削除されたか名前を変更されたときのみ,通知可能 です.リンクが無くなった後でも,増え続けるファイルの終りの追跡を続けたい 場合は,--follow=descriptorを使用してください.これはデフォルトの 動作ですが,回転(rotate)される(削除や名前の変更がなされ,再び開かれる)ロ グファイルを追跡しているときは不便です.その場合,他のプログラムにより削 除され再作成されたかどうかを周期的に見て,再び開かれる指名されたファイル を追跡するため,--follow=nameを使用してください.

使用している方法にかかわらず,追跡しているファイルが縮まっていると決定さ れた場合,tailはfileが切り詰められたことを告げるメッセージを出力 し,新たに決定された終端からファイルの終りを再追跡しはじめます.

ファイルが削除されたとき,tailの動作は,名前で続けるか記述子で続 けるかに依存します.名前で続けるとき,tailはファイルが削除された ことと,その効果にメッセージを与えることが検出でき,--retryが指定 されている場合,ファイルが再び現れたかどうかを見るため,周期的な調査を続 けるでしょう.記述子で続けるとき,tailはファイルのリンクが切れた り名前が変更されたことを検出せず,メッセージを発しません.ファイルは既に 元の名前でアクセスできませんが,まだ増加しているかもしれません.

オプション値のdescriptornameはオプションの長い形式でのみ 指定でき,-fでは指定できません.

--retry
このオプションは,名前で続けるときのみ意味があります.このオプションが無 い場合,tailが,存在していない,またはそれ以外のアクセスできない ファイルに遭遇したとき,それはその事実を報告し再び調査しません.
--sleep-interval=n
繰り返しの間の待ち時間の秒数を変更します(デフォルトは1).待っている間, 指定された全てのファイルは大きさが変ったかどうか調査されます.
--pid=pid
名前または記述子で続ける場合,全てのfile引数に唯一書き込んでいるプ ロセスID pidを指定できます.そして,プロセスが終了した少し後で, tailも終了します.これは書き込んでいるものとtailプロセスが 同じマシンで働いている場合のみ正確に働きます.例えば,ファイルにビルドの 出力を保存したり,ファイルが大きくなるのを見たりするため,maketailを以下のように呼び出し,ビルドが完了したときtailの処理 は終了します.このオプションが無い場合,tail -fプロセスを自分でキ ルする必要があります.
$ make >& makerr & tail --pid=$! -f makerr
使用中でない,または,tailされるファイルに書き込んでいるプロセス に対応しないpidを指定した場合,tailはあらゆるfileが増 加するのを停止する前に終了する,または,実際に書き込んでいるものが終了し た後,しばらくしてから終了します.
--max-consecutive-size-changes=n
このオプションは,名前で続けるときのみ意味があります.削除されたり,名前 を変更されたりした後でさえ,速いペースで増加し続けるファイルの記述子で続 けているtailの長さを制御するために使用してください.ファイルに対 し,サイズ変更が連続してn検出した後で,ファイル名が,以前と同じデ バイス/inode番号の対で対応されているかどうか決定するため,ファイルを open/fstatします.デフォルト値は,tail --helpの出力 を参照してください.
--max-unchanged-stats=n
名前でファイルをtailしているとき,同じ大きさのままで,繰り返しが 連続して何度もある場合,ファイル名が,以前と同じデバイス/inode番号の対で 対応されているかどうか決定するため,ファイルをopen/fstatし ます.回転(rotate)されているログファイルを続けるとき,前回に回転した行を tailが出力するときと,新しいログファイルで蓄積された行を出力する ときの間は,おそらく数秒になります.デフォルト値はtail --helpの出 力を参照してください.このオプションは,名前で続けているときのみ意味があ ります.
-n n
--lines=n
最後のn行出力します.
-q
-quiet
--silent
ファイル名のヘッダを出力しません.
-v
--verbose
常にファイル名のヘッダを出力します.


Node:split invocation, Next:, Previous:tail invocation, Up:Output of parts of files

split: ファイルを固定サイズの部分に分割

splitは,input(inputが与えられなかったり,-の 場合は標準入力)の連続したセクションを含む出力ファイルを生成します.概要 です.

split [option] [input [prefix]]

デフォルトで,splitinputの1000行(または,最後のセクション は残り)を,それぞれの出力ファイルに書き込みます.

出力ファイルの名前はprefix (デフォルトはx)から成り立ち, aaab等の文字の集合が続き,それは,出力ファイルをファイル 名の順番でソートして結合したものが,元の入力ファイルを生成するようにする ためです.出力ファイルが676以上必要な場合,splitzaazab等を使用します.)

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


-lines
-l lines
--lines=lines
inputlines行を,それぞれの出力ファイルに書き込みます.
-b bytes
--bytes=bytes
inputの最初のbytesバイトを,それぞれの出力ファイルに書き込み ます.bの後置はbytesの512倍,kは1024倍,そして mは1048576倍です.
-C bytes
--line-bytes=bytes
bytesバイトを越えないinputの完全な行を,できるだけ多くそれぞ れの出力ファイルに書き込みます.bytesバイトより長い行に対しては, 行のbytesバイトより少ない部分が残るまで,それぞれの出力ファイルに bytesバイト書き込み,それから通常に続けます.bytes--bytesオプションに対するものと同じ書式です.
--verbose
それぞれの出力ファイルが開かれる直前に,標準エラーに状態を書き込みます.


Node:csplit invocation, Previous:split invocation, Up:Output of parts of files

csplit: ファイルを文脈で決定された部分に分割

csplitは,input (input-の場合は標準入力)の部 分を含む,ゼロ以上の出力ファイルを作成します.概要です.

csplit [option]... input pattern...

出力ファイルの内容は,後で詳述するpattern引数で決定されます. pattern引数が,入力ファイルに存在しない行を参照する場合,エラーが 発生します(例えば,残っている行が与えられた正規表現に一致しない場合).全 てのpatternが一致した後,あらゆる残りの入力は,1つの最後の出力ファ イルにコピーされます.

デフォルトで,csplitは,それぞれの出力ファイルが作成された後,バ イト数を書き込みます.

pattern引数の形式は以下の通りです.


n
n行までの入力を含む出力ファイルを作成しますが,n行は含みませ ん.繰り返し数が続く場合,それぞれの繰り返しに対し,入力ファイルの次の line行を含む出力ファイルも作成します.
/regexp/[offset]
regexpに一致するものを含む入力ファイルの次の行まで現在の行(ただし, それは含まれない)を含む出力ファイルを作成します.オプションの offsetは,+または-に正の整数が続きます.与えられた場 合,一致行までの入力に,offset加えた,または引いた入力まで出力ファ イルに書き出され,その後の行は入力の次の部分になります.
%regexp%[offset]
前の形式に似ていますが,出力ファイルを作成しないので,入力ファイルの部分 は効率的に無視されます.
{repeat-count}
前のパターンをrepeat-count回追加して繰り返します. repeat-countは正の整数,またはアスタリスクになり,それは入力が使い 果たされるのに必要なだけ繰り返すことを意味します.

出力ファイル名は,前置(デフォルトでxx)とそれに続く接尾子から成り 立ちます.デフォルトで接尾子は2桁の10進数で,00から99まで 順番に上昇します.あらゆる場合で,ファイル名の順番でソートされた出力ファ イルを連結すると,元の入力ファイルを生成します.

デフォルトで,csplitがエラーや,ハングアップ,中断,終了,または 終端シグナルを検出した場合,それまでに存在する作成されたあらゆる出力ファ イルを削除します.

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


-f prefix
--prefix=prefix
出力ファイルの接尾子として,prefixを使用します.
-b suffix
--suffix=suffix
出力ファイル名の接尾子としてsuffixを使用します.このオプションが指 定された場合,接尾子の文字列は,正確に1つのprintf(3)形式の変換で の指定を含む必要があり,おそらく,書式指定のフラグ,フィールドの幅,正確 な指定,または,これら全ての修飾語を含みます.フォーマット文字は,2進の 整数の引数を可読なものに変換する必要があります.このため,diuox,そしてXの変換は可能です. 完全なsuffixは,順番にそれぞれの個別な出力ファイルに対し,ファイル 名の接尾子を形成するため,(現在の出力ファイル数とともに) sprintf(3)に与えられます.このオプションを使用した場合, --digitsオプションは無視されます.
-n digits
--digits=digits
デフォルトの2の代わりにdigits桁の長さの数字を含む出力ファイル名を 使用します.
-k
--keep-files
エラーが検出された場合でも出力ファイルを削除しません.
-z
--elide-empty-files
長さゼロの出力ファイルの生成を抑制します.(入力ファイルの,部分の区切り がそれぞれの部分の区切りの最初の行に印を付ける場合,このオプションを使用 しなければ,最初の出力ファイルは一般に,長さゼロのファイルになります.) 出力ファイルの順番は,このオプションが指定されているときでさえ,0から開 始し,常に連続して実行します.
-s
-q
--silent
--quiet
出力ファイルの大きさを出力しません.


Node:Summarizing files

ファイルの要約

これらのコマンドは,ファイルの内容全体を表現するいくつかの数字を生成しま す.


Node:wc invocation, Next:, Up:Summarizing files

wc: バイト,単語,行数を出力

wcは,それぞれの与えられたfileや,与えられなかった場合や -fileに対し,バイト数,空白で区切られた単語,そして改行を 数えます.概要です.

wc [option]... [file]...

wcは,それぞれのファイルに対し,数えたものを1行出力し,ファイルが 引数として与えられた場合,カウントに続けてファイル名を出力します.1つ以 上のfileが与えられた場合,wcは,ファイル名totalと共 に,累積カウントを最終行に出力します.カウントは,以下の順序で出力されま す.改行,単語,バイトです.デフォルトで,それぞれのカウントは,数字とファ イル名の行が列にうまく並ぶように,右寄せで,7バイトフィールドで,それぞ れのフィールドの間にスペースを入れて出力します.しかし,POSIXは列を分け るために,正確に1つのスペースがあることを要求します. POSIXLY_CORRECT環境変数を設定することで,wcを出力形式が POSIXで義務化されているようにさせることができます.

デフォルトで,wcは3つのカウントすべてを出力します.オプションで, 出力したいカウントのみを指定することができます.オプションは,前に与えら れたものを元に戻すことはできません.そのため,以下のようにした場合を考え ます.

wc --bytes --words

これは,バイトカウントと単語のカウントの両方を出力します.

--max-line-lengthオプションを用いた場合,wcはファイル毎の 最長の行の長さを出力し,1つ以上のファイルがある場合,それらの長さの(合計 ではなく)最大を出力します.

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


-c
--bytes
--chars
バイトカウントのみ出力します.
-w
--words
単語カウントのみ出力します.
-l
--lines
改行カウントのみ出力します.
-L
--max-line-length
最長行の長さのみ出力します.


Node:sum invocation, Next:, Previous:wc invocation, Up:Summarizing files

sum: チェックサムとブロック数を出力

sumは,与えられたそれぞれのfile,または,与えられない場合や -のファイルが与えられた場合は標準入力の16ビットのチェックサムを計 算します.概要です.

sum [option]... [file]...

sumは,それぞれのfileのチェックサムに続けて,ファイルのブロッ ク数を(切り上げで)出力します.1つ以上のfileが与えられた場合,ファ イル名も出力されます(デフォルト).(--sysvオプションを指定した場合, 少なくとも1つのファイル引数があるときは,対応するファイル名が出力されま す.)

デフォルトで,GNU sumは,BSD sumと互換性のあるアルゴリズム を用いて計算し,ファイルサイズを1024バイトブロックの単位で出力します.

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


-r
デフォルト(BSD互換)のアルゴリズムを使用します.このオプションは,System V sumとの互換性も含みます.-sを与えない限り,効果はありま せん.
-s
--sysv
System V sumのデフォルトと互換のアルゴリズムを使用して,チェック サムを計算し,512バイトブロックの単位でファイルサイズを出力します.

sumは,互換性のために提供されています.cksumプログラム(次 のセクションを参照)は,新しいアプリケーションでは望ましいです.


Node:cksum invocation, Next:, Previous:sum invocation, Up:Summarizing files

cksum: CRCチェックサムとバイトカウントを出力

cksumは,与えられたそれぞれのfile,または,与えられない場合 や-のファイルが与えられた場合は標準入力の周期的な冗長性の調査 (CRC)のチェックサムを計算します.概要です.

cksum [option]... [file]...

cksumは,ファイルのバイト数と一緒に,それぞれのファイルに対し, CRCチェックサムと,引数が与えられていない場合以外はファイル名を出力しま す.

cksumは,通常,信用できない手段(例えば,ネットニュース)で転送され たファイルが切り詰められていないか,受信したファイルのcksum出力と 元ファイルのcksum出力(通常は配布物で与えられます)を比較することで 確認するために使用します.

CRCアルゴリズムは,POSIX.2標準で指定されました. BSDやSystem V sumアルゴリズムとは互換性がありません(前のセクションを参照してく ださい).それはより強固です.

オプションは--help--versionだけです.See Common options.


Node:md5sum invocation, Previous:cksum invocation, Up:Summarizing files

md5sum: メッセージダイジェストの出力と調査

md5sumは,それぞれ指定されたfileに対し,128-bitチェックサム (またはfingerprint,またはmessage-digest)を計算します. file-で指定されたり,ファイルが与えられていない場合は, md5sumは標準入力のチェックサムを計算します.md5sumは,ファ イルとチェックサムが一貫しているかどうか決定することも可能です.概要です.

md5sum [option]... [file]...
md5sum [option]... --check [file]

それぞれのfileに対し,md5sumは,MD5チェックサム,入力ファイ ルがバイナリかテキストかを示すフラグ,そしてファイル名を出力します. fileが無い,または-として指定されている場合,標準入力を読み 込みます.

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


-b
--binary
全ての入力ファイルをバイナリとして扱います.このオプションは,Unixシステ ムではバイナリとテキストでファイルに差が無いので効果がありません.このオ プションは,内部と外部での文字表示が異なるシステムでは便利です.MS-DOSと MS-Windowsでは,これはデフォルトです.
-c
--check
ファイル名とチェックサム情報を,単一のfile(または,fileが指 定されない場合は標準入力)から読み込み,それぞれの名前のファイルと対応す るチェックサムデータが一貫しているかどうか報告します.md5sumのこ のモードでの入力は,通常前回の出力で,md5sumの実行でチェックサム が生成したものです.それぞれの入力の有効な行は,MD5チェックサムから成り 立ち,バイナリ/テキストフラグと,ファイル名です.バイナリファイルは, *で,テキストは 印が付きます.それぞれのそのような行に対し, md5sumは,指名されたファイルを読み込み,そのMD5チェックサムを計算 します.そして,計算されたメッセージダイジェストが,ファイル名を持つ行の 1つと一致しない場合,ファイルはテストに失敗したことをメモされます.それ 以外の場合,ファイルは調査を通過します.デフォルトで,それぞれの有効な行 に対し,指名されたファイルが調査を通過したかどうかを示す1行を,標準出力 に書かれます.全ての調査の実行後,失敗があった場合,警告を標準エラーに発 行します.出力を抑制するために,--statusオプションを使用してくだ さい.リストアップされたファイルに,開いたり読み込んだりでできないものが ある場合,有効な行が関連するファイルとMD5チェックサムに一貫性が無い場合, または,有効な行が見つからない場合,md5sumはゼロ以外のステータス で終了します.それ以外の場合は,正しく終了します.
--status
このオプションは,チェックサムの照合時のみ便利です.チェックサムを照合す るとき,デフォルトのファイルに対し1行の診断を生成せず,あらゆる失敗を要 約する警告を出力しません.ファイルを開くあるいは読み込む際の失敗は,標準 エラーに個別の診断を喚起します.リストされたファイルがすべて読み込み可能 で,対応するMD5チェックサムと一貫している場合,正しく終了します.それ以 外の場合,失敗があることを示すステータスコードで終了します.
-t
--text
全ての入力ファイルを,テキストファイルとして扱います.このオプションは --binaryの反対です.
-w
--warn
チェックサムを照合するとき,不適切に書式化されたMD5チェックサム行につい て警告します.このオプションは,入力の調査で,全てではなくいくつかの行が 有効な場合のみ便利です.


Node:Operating on sorted files

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

これらのコマンドは,ソートされたファイルで働く(あるいはそれを生成する)コ マンドです.


Node:sort invocation, Next:, Up:Operating on sorted files

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

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

sort [option]... [file]...

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


-c
与えられたファイルが,すでにソートされているかどうか調査します.全てがソー トされていない場合,エラーメッセージを出力し,1のステータスで終了します. それ以外の場合は正常に終了します.
-m
与えられたファイルを,グループ化してソートすることで,統合します.それぞ れの入力ファイルは,個別にソートされている必要があります.それは常に,統 合ではなくソートのために働きます.統合は,それが動作する場合,より速いた め提供されています.

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

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

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

GNU sort は,(全てのGNUユーティリティで指定されるように)入力行の 長さの制限や,行で許可されるバイト数の限界がありません.更に,入力ファイ ルの最終バイトが改行でない場合,GNU sortは,黙ってそれを供給しま す.行の後ろの改行は,比較の目的では行の一部です.例えば,ASCIIロケー ルでオプションを用いない場合,ASCIIの対照の順序では,タブは改行の前 にあるので,タブで始まる行は空の行の前に来ます.

あらゆるエラーで,sort2のステータスで終了します.

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

以下のオプションは,出力行の順序に影響します.それらは,大域的,またはキー フィールドの一部として指定可能です.キーフィールドが指定されていない場合, 大域的なオプションは行全体の比較に対して適用されます.それ以外では,大域 的なオプションは,それ自身オプションが指定されていないキーフィールドに継 承されます.-b-d-f,そして-iオプションは, LC_CTYPEロケールに従い,文字を分類します.


-b
それぞれの行でソートするキーを探すとき,前の空白を無視します.
-d
phone directoryの順序でソートします.ソート時に,文字,数字,そし て空白以外の全ての文字は無視されます.
-f
ソート時に,小文字を大文字と同じに扱い,例えば,bBは同等 にソートされます.
-g
数値的なソートをし,それには,それぞれの行のプレフィクスを倍精度浮動小数 点の数に変換するため,標準C関数strtodを使用します.これで, 1.0e-3410e100のような浮動小数点の数を,科学的な表記方で 指定できます.オーバーフローや,アンダーフロー,変換エラーは報告しません. 以下の対照の順序を使用します.

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

-i
印刷不可能な文字を無視します.
-M
あらゆる量の空白と,以下に月の名前の省略が続くものから成り立つ,最初の文 字列は,大文字に覆われ,JAN < FEB < ... < DECの 順に比較されます.無効な名前は,有効な名前の下になります.LC_TIME ロケールは,月の綴を決定します.
-n
数値的なソートです.数字でそれぞれの行を開始します.特に,オプションの空 白,オプションの-記号,そして,1000で区切られたり,小数点文字とゼ ロ以上の桁を続けることが可能な,ゼロ以上の桁から成り立ちます. LC_NUMERICロケールで,小数点文字と1000区切りを指定します.

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

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

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

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


-o output-file
標準出力の代わりに,output-fileに出力を書き出します. output-fileが入力ファイルの1つの場合,sortはそれを,ソート 前に一時ファイルにコピーし,output-fileに出力を書き出します.
-t separator
それぞれの行からソート行を検索するとき,フィールドセパレータとして,文字 separatorを使用します.デフォルトで,フィールドは,空白でない文字 と空白文字の間の空の文字列で分離されます.すなわち,入力行 foo barが与えられた場合,sortはそれを,フィールド foo barに分離します.フィールドセパレータは,フィールドの前やフィー ルドの後の部分とは考えられません.
-u
デフォルトの場合や-mオプションに対し,比較が等しい行の順序の最初 のみを出力します.-cオプションに対し,比較が等しい連続した行の対 が無いことを調査します.
-k pos1[,pos2]
ソートフィールドを指定するための,POSIXの推薦されるオプションです. フィールドは,pos1pos2(または,pos2が省略された場合 は行末)の間の行の部分から成り立つ,全てを包括します.フィールドと 文字の位置は,1から番号付けされます.そのため,2番目のフィールドをソート するため,-k 2,2を使用してください.以下により多くの例があります.
-z
入力を行のセットとして扱い,ASCII LF (Line Feed)の代わりにゼロ バイト(ASCII NUL (Null)文字)で終端します.このオプションは,任 意のパス名を(ラインフィード文字を含んでいても)確実に処理するため, perl -0や,find -print0xargs -0と組み合わせると便 利です.
+pos1[-pos2]
時代遅れで,ソートフィールドを指定するための伝統的なオプションです.フィー ルドは,行のpos1pos2(または,pos2が省略された場合は 行末)を含まない間から成り立ちます.フィールドと文字の位置は,0か ら番号付けされます.以下を見てください.

更に,GNU sortが正確に1つの引数で呼び出されたとき,オプション --help--versionは認識されます.See Common options.

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

-k+オプションを用いたソート時のフィールド指定の位置は, f.c形式を持ち,fは使用するフィールド数で, cは(+posに対する)フィールドの最初から,または, (-posに対する)前のフィールドの終りからの,最初の文字数です. .cが省略された場合,フィールドの最初の文字を用います. -bオプションが指定された場合,指定したフィールドの.c の部分は,(+posに対する)フィールドの最初の空白ではない文字 から,または,(-posに対する)前のフィールドから続く最初の空 白ではない文字から数えます.

ソートキーオプションは,オプション文字Mbdfinrを加えることが可能で, その場合,大域的な順序オプションは,特定のフィールドに使用されません. -bオプションは,指定したフィールドの+pos-posの部分の,一方または両方に独立に適用され,大域的なオプ ションを継承する場合,両方に適用されます.キーは複数のフィールドに跨るこ とができます.

ここに,様々なオプションの組合せを紹介する例があります.その中で,ソート キーを指定するためのPOSIX -kオプションが,時代遅れの +pos1-pos2構文の代わりに使用されています.


Node:uniq invocation, Next:, Previous:sort invocation, Up:Operating on sorted files

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

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

uniq [option]... [input [output]]

デフォルトで,uniqはソートされたファイルのユニークな行を出力し, すなわち,一意に識別可能な行以外を全て削除します.オプションで,そうする 代わりに,1度しか現われない行を表示したり,1度以上現われる行を表示したり できます.

入力ファイルはソートされている必要があります.入力がソートされていない場 合,おそらくsort -uを使用したいと思います.

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

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


-n
-f n
--skip-fields=n
ユニークさを調査する前に,それぞれの行のnフィールドスキップします. フィールドは,少なくとも1対上のスペースやタブで区切られた,非スペース, 非タブ文字の並びです.
+n
-s n
--skip-chars=n
ユニークさの調査の前に,n文字スキップします.フィールドと文字のス キップオプションを両方とも使用した場合,フィールドが最初にスキップされま す.
-c
--count
それぞれの行で同じものが発生した回数を出力します.
-i
--ignore-case
行の比較時に大文字小文字の違いを無視します.
-d
--repeated
重複する行のみを出力します.
-D
--all-repeated
全ての重複する行で,重複する行のみを出力します.このオプションは,主に他 のオプションと組み合わせると便利で,例えば,大文字小文字を無視したり,選 択したフィールドのみを比較する場合です.これは,GNUの拡張です.
-u
--unique
ユニークな行のみ出力します.
-w n
--check-chars=n
(指定されたあらゆるフィールドと文字をスキップした後) それぞれの行の n文字比較します.デフォルトで,行の残りが比較されます.


Node:comm invocation, Next:, Previous:uniq invocation, Up:Operating on sorted files

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

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

comm [option]... file1 file2

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

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

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

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


Node:tsort invocation, Previous:ptx invocation, Up:Operating on sorted files

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

tsortは,位相幾何学的なソートを,与えられたファイルや,入力ファイ ルが与えられない場合や-のファイルに対しては標準入力で実行します. 概要です.

tsort [option] [file]

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

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

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

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

a
b
c
d
e
f

tsortは入力で円を検出し,出現した最初の円を標準エラーに書き出しま す.

与えられた不完全な順序が,一般に唯一の完全な順序でないことに注意してくだ さい.

オプションは,--help--versionのみです.See Common options.


Node:ptx invocation, Next:, Previous:comm invocation, Up:Operating on sorted files

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

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

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

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

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

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

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

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


Node:General options in ptx, Next:, Up:ptx invocation

一般的なオプション


-C
--copyright
著作権とコピー条件の短いメモを出力し,それ以上何も処理せず終了します.
-G
--traditional
既に拡張されているので,このオプションは,ptxに対する全てのGNU拡 張を利用不可にし,伝統的なモードに切替えます.
--help
短いヘルプを標準出力に出力し,それ以上何も処理せず終了します.
--version
プログラムのバージョンを標準出力に出力し,それ以上何も処理せずに終了しま す.


Node:Charset selection in ptx, Next:, Previous:General options in ptx, Up:ptx invocation

文字セットの選択

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


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


Node:Input processing in ptx, Next:, Previous:Charset selection in ptx, Up:ptx invocation

単語の選択と入力の処理


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

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

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

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

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

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

-r
--references
それぞれの入力行で,空白文字でない前置された並びは,生成され並べ替えされ た索引の,この入力行を識別する目的を持つ参照として受け入れます.参照生成 に関するより多くの情報は,See Output formatting in ptx. このオプショ ンの使用で,オプション-Sに対するデフォルト値を変更します.

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

-S regexp
--sentence-regexp=regexp
このオプションは,行末や文の終りを記述する正規表現を選択します.実際,こ の正規表現の効果以外に,行末や文の終わりのには他の区別があり,入力行の境 界は,このオプションの外で特別な重要性はありません.デフォルトで,GNU拡 張が使用可能なときや,-rオプションが使用されていない場合,文の終 りが使用されます.この場合,正確なregexはGNU emacsから取り込まれま す.
[.?!][]\"')}]*\\($\\|\t\\|  \\)[ \t\n]*

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

\n

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

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

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

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

空のregexpは,このオプションを使用しないのと同等で,デフォルト動作 になります.See Regexps.

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


Node:Output formatting in ptx, Next:, Previous:Input processing in ptx, Up:ptx invocation

出力の書式

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

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

-T
--format=tex
TeXでの処理に適した出力書式を選択します.それぞれの出力行は以下のよう になります.
\xx {tail}{before}{keyword}{after}{head}{ref}

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

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


Node:Compatibility in ptx, Previous:Output formatting in ptx, Up:ptx invocation

ptxのGNU拡張

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


Node:Operating on fields within a line

行のフィールドの処理


Node:cut invocation, Next:, Up:Operating on fields within a line

cut: 行の選択した部分の出力

cutは,それぞれの入力ファイルや,ファイルが与えられない場合や -のファイル名に対しては標準入力の,それぞれの行の選択された部分を 標準出力に書き出します.概要です.

cut [option]... [file]...

以下の表で,byte-listcharacter-listと,field-listは, 1つ以上の数字またはカンマで分けられた(ダッシュで分けられた2つの数字の)範 囲です.バイト,文字と,フィールドは,1で始まる番号がつきます.不完全な 範囲を与えることができます.-m1-mを意味しま す.n-は,nから行末やフィールドの終りまでを意 味します.

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


-b byte-list
--bytes=byte-list
byte-listでリストアップされた位置にあるバイトのみを出力します.タ ブとバックスペースは他の文字と同様に扱われます.それらは1バイト使用しま す.
-c character-list
--characters=character-list
character-listにリストアップされた位置にある文字のみを出力します. 現在は-bと同じですが,国際化はそれを変更する可能性があります.タ ブとバックスペースは他の文字と同様に扱われます.それらは1バイト使用しま す.
-f field-list
--fields=field-list
field-listにリストアップされたフィールドのみを出力します.デフォル トで,フィールドはTAB文字で分けられています.
-d input_delim_byte
--delimiter=input_delim_byte
-fに対し,フィールドは,input_delim_byteの最初の文字により, 入力で分けられます(デフォルトはTABです).
-n
マルチバイトの文字を分けません(現在何もしません).
-s
--only-delimited
-fに対し,フィールド分離文字を含まない列を出力しません.
--output-delimiter=output_delim_string
-fに対し,出力フィールドは,output_delim_stringで分けられま す.デフォルトは入力分離文字を使用します.


Node:paste invocation, Next:, Previous:cut invocation, Up:Operating on fields within a line

paste: ファイルの行を統合します

pasteは,与えられたそれぞれファイルの連続して対応している行から成 り立つ行を標準出力に書き出し,それはTAB文字で分けられています.- のファイル名や,入力ファイルが与えられない場合,標準入力が使用されます.

概要です.

paste [option]... [file]...

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


-s
--serial
それぞれのファイルから1行ではなく,1度に1つのファイルの行をペーストしま す.
-d delim-list
--delimiters delim-list
統合される行の分離のTABの代わりに,delim-listの文字を順番に使用し ます.delim-listが使い尽くされたとき,その最初で再び開始します.


Node:join invocation, Previous:paste invocation, Up:Operating on fields within a line

join: 共通のフィールドで行を結合

joinは,同一の結合したフィールドを持つそれぞれの入力行の組の行を 標準出力に書き出します.概要です.

join [option]... file1 file2

file1またはfile2は(両方ではなく)-が可能で,標準入力を 意味します.file1file2は,結合したフィールド上で増加してい る,原文通りの順番で既に保存されているべきで,それは,LC_COLLATEロ ケールで指定された,対照の順序を使用します.-tオプションが与えら れていない場合,入力は,sort -bで,結合フィールドの最初の空白を無 視して保存されているべきです.--ignore-caseオプションが与えられた 場合,行はsort -fで,結合フィールドの文字の大文字小文字に関係なく ソートされているべきです.

デフォルトは,以下の通りです.結合フィールドは,それぞれの行の最初のフィー ルドです.入力のフィールドは,1つ以上の空白で分かれていて,行の前の空白 は無視されます.出力のフィールドはスペースで分けられています.それぞれの 出力行は,結合フィールド,file1からの残りのフィールド,それから, file2の残りのフィールドから成り立ちます.

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


-a file-number
ファイルfile-number (1または2のいずれか)で組になって いないそれぞれの行に対し,1行を通常の出力に追加して出力します.
-e string
入力で欠けているこれらの出力フィールドを,stringで置換します.
-i
--ignore-case
キーを比較するとき,大文字小文字の違いを無視します.このオプションを用い た場合,入力ファイルの行は同じ方法でソートされている必要があります.この 順序を生成するために,sort -fを使用してください.
-1 field
-j1 field
ファイル1のフィールドfield (正の整数)で結合します.
-2 field
-j2 field
ファイル2のフィールドfield (正の整数)で結合します.
-j field
-1 field -2 fieldと同じです.
-o field-list...
field-listの書式に従い,それぞれの出力行を生成します. field-listのそれぞれの要素は,単一文字0,または,ファイル番 号のm1または2で,nが正のフィールド番号となる m.nの形式になります.

0のフィールド指定は,結合フィールドを示します.ほとんどの場合, 0フィールドの指定の機能は,対応する結合フィールドとなる,明示的な m.nを用いて再現できます.しかし,(-aまたは-vオプショ ンを用いて)組にならない行を出力するとき,両方のファイルで組にならない行 がある場合,field-listm.nを用いて結合フィールドを指定する 方法はありません.joinにその機能を与えるため,POSIX0フィールド指定の表記を考え出しました.

field-listの要素は,カンマまたは空白で分けられています.複数の field-list引数で,単一の-oオプションの後に与えることができ ます.-oで与えられる全てのリストの値は,一緒に連結されます.全て の出力行は--a-vオプションで出力されるものを含め-指定さ れたfield-listを適用されます.

-t char
文字charを入出力のフィールドセパレータとして使用します.
-v file-number
通常の出力の代わりに,ファイルfile-number (1または2)の組にならない それぞれの行に対し,1行を出力します.

更に,GNU joinが1つの引数で呼び出された場合,オプション --help--versionは認識されます.See Common options.


Node:Operating on characters

文字の処理

このコマンドは,個別に文字を処理します.


Node:tr invocation, Next:, Up:Operating on characters

tr: 文字の変換,圧縮,そして/または,削除

概要です.

tr [option]... set1 [set2]

trは標準入力を標準出力にコピーし,そのとき以下の処理の一つを実行 します.

set1と(与えられている場合)set2引数は,文字の順序を持つ文字を 定義し,以下のset1set2を参照します.これらの設定は, trが処理する入力文字です.--complement (-c)オプショ ンは,set1をその補語(set1にない全ての文字)に置換します.


Node:Character sets, Next:, Up:tr invocation

文字セットの指定

set1set2の引数の書式は,正規表現の書式に似ています.しかし 正規表現ではなく,文字のリストのみです.これらの文字列のほとんどの文字は 単にその文字自身を表すが,利便性のため,文字列には以下でリストアップされ た速記を含むことができます.そのうち,以下で注意するset1または set2のみでしか利用できないものもあります.


バックスラッシュエスケープ

以下でリストアップされていない,文字が続くバックスラッシュは,エラーメッ セージを発生します.

\a
Control-G.
\b
Control-H.
\f
Control-L.
\n
Control-J.
\r
Control-M.
\t
Control-I.
\v
Control-K.
\ooo
oooで与えられる値の文字で,1から3桁までの8進数.
\\
バックスラッシュ.

範囲

表記方法のm-nは,mからnまで昇順に,全ての 文字に展開されます.mは,対照でnの前であるべきです.そうでな い場合,結果としてエラーとなります.例としては,0-90123456789と同じです.GNU trは,範囲を囲む角括弧を使用する System V 構文をサポートしませんが,その書式で指定された変換は, set1のカッコがset2のカッコと同じように対応する限り働き ます.

繰り返される文字

set2での[c*n]の表記は,文字cn個の コピーに展開されます.このため,[y*6]yyyyyyと同じです. set2での[c*]の表記は,set2set1と同じ長 さにするのに必要なだけ,cの多くのコピーに展開されます.n0で始まる場合は8進数に,それ以外では10進数に解釈されます.

文字クラス

[:class:]の表記は,(あらかじめ定義された)クラスclass にある全ての文字に展開されます.文字は,特定の順序で展開されませんが, upperlowerクラスは,昇順に展開されます.--delete (-d)と--squeeze-repeats (-s)オプションが両方与えら れた場合,あらゆる文字クラスはset2で使用されるはずです.それ以外の 場合,文字クラスlowerupperは,set2に適用され,そし てそれは,対応する(それぞれupperlowerの)文字クラスは set1の位置に関連して同じものが指定されている場合のみです.こうする ことで,大文字小文字の変換を指定します.クラス名は以下で与えられます.無 効なクラス名が与えられた場合,結果としてエラーとなります.

alnum
文字と数字.
alpha
文字.
blank
水平方向の空白.
cntrl
コントロール文字.
digit
数字.
graph
スペースを含まない,印刷可能な文字.
lower
小文字.
print
スペースを含む,印刷可能な文字.
punct
句読点文字.
space
水平垂直の空白.
upper
大文字.
xdigit
16進数の数字.

等価なクラス

構文[=c=]は,cと等価な文字の全てに,特定の順序を持た ずに展開されます.等価なクラスは,英語以外のアルファベットをサポートする 目的で,比較的最近発明されました.しかし,それらの定義や内容を決定する標 準的な方法はなさそうです.それゆえ,GNU trでは,完全には実装され ていません.それぞれの文字の等価クラスは,その文字からのみ構成されていて, 特定の利用価値はありません.


Node:Translating, Next:, Previous:Character sets, Up:tr invocation

変換

set1set2の両方が与えられ,--delete (-d)オプ ションが与えられていない場合,trは変換を実行します.trは, set1にある入力のぞれぞれの文字を,対応するset2の文字に変換し ます.set1に無い文字は,そのまま変換されず通過します.set1の 文字が1回以上現われ,set2の対応する文字が全て同じではない場合,最 後の1つのみ使用されます.例えば,以下の2つのコマンドは等価です.

tr aaa xyz
tr a z

trの一般的な使用法は,小文字を大文字に変換することです.これは多 くの方法で行うことができます.その3つを以下に書きます.

tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
tr a-z A-Z
tr '[:lower:]' '[:upper:]'

trが変換を実行しているとき,set1set2は,通常同じ長 さです.set1set2より短い場合,set2の終りの余分な文字 は無視されます.

一方,set1set2より大きくすることは移植性がありません. POSIX.2は,その結果は未定義だと述べています.この場合,BSD trは,set2set2の最後文字で必要なだけ繰り返すことで set1の長さに引き延ばします.System V trは,set1set2の長さに切り詰めます.

デフォルトで,GNU trはBSD trのようにこの状態を扱います. --truncate-set1 (-t)オプションが与えられた場合,GNU trはSystem V trのようにこの状態を扱います.このオプション は,変換以外の処理では無視されます.

この場合,System V trのように動作させると,比較的一般的なBSDの表 現は壊れます.

tr -cs A-Za-z0-9 '\012'

それは,全ての英数字を改行に変換する代わりに,(set1の補語の最初の 要素)ゼロバイトのみ変換されるためです.


Node:Squeezing, Next:, Previous:Translating, Up:tr invocation

繰り返しの圧縮と削除

--delete (-d)オプションのみ与えられたとき,trは, set1にあるあらゆる入力文字を削除します.

--squeeze-repeats (-s)オプションのみ与えられたとき, trは,set1にある,それぞれの入力の繰り返される文字の並びを, その文字の単一の発生(訳注:1つの文字)に置換します.

--delete--squeeze-repeatsの両方が与えられた場合, trは,最初にset1を用いて削除を実行し,set2を用いて残 りの文字から繰り返しを圧縮します.

--squeeze-repeatsオプションは,変換時にも利用でき,その場合, trは,最初に変換を実行し,set2を用いて残りの文字から繰り返 しを圧縮します.

ここに,オプションの様々な組合せの表現例をいくつかあげます.


Node:Warnings in tr, Previous:Squeezing, Up:tr invocation

警告メッセージ

環境変数POSIXLY_CORRECTを設定すると,POSIX.2を厳密に遵守する ため,以下の警告とエラーのメッセージをオフにします.それ以外の場合,以下 の診断が発生されます.

  1. --deleteオプションが与えられているが,--squeeze-repeatsが 与えられておらず,set2が与えられているとき,GNU trは, set2が使用されないため,デフォルトで使用方法のメッセージを出力し終 了します.POSIX指定は,この場合set2は無視されるはずだと述べて います.黙って引数を無視するのは悪い考えです.
  2. 曖昧な8進数のエスケープが与えられたときです.例えば\400は,8進数 の400の値が単一バイトに適さないので,実際には0が後置された \40になります.

GNU trは,BSDやSystem Vとの完全な互換性を提供しません.例えば, POSIXの概念[:alpha:][=c=]と,[c*10]の解釈を 利用不可にすることはできません.また,GNU trは,ゼロバイトを保護 する方法を提供できない伝統的なUnixバージョンと異なり,ゼロバイトを自動的 に削除できません.


Node:expand invocation, Next:, Previous:tr invocation, Up:Operating on characters

expand: タブをスペースに変換

expandは,与えられたそれぞれのfile,または,与えられない場 合や-fileの場合は標準入力の内容を,タブ文字を適切な数のス ペースに変換して,標準出力に書き出します.概要です.

expand [option]... [file]...

デフォルトで,expandは全てのタブをスペースに変換します.それは全 ての出力でバックスペース文字を維持します.それらはタブ計算に対し,列の数 を減少させます.デフォルトの動作は-8(タブをそれぞれ8列に設定する) と同じです.

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


-tab1[,tab2]...
-t tab1[,tab2]...
--tabs=tab1[,tab2]...
1つのタブストップのみ与えられた場合,タブをtab1個の別々のスペース (デフォルトで8)に設定します.それ以外の場合,タブをtab1tab2... (0から番号付けされる)列に設定し,与えられた最後のタ ブストップ以降のあらゆるタブを単一のスペースで置換します.タブストップが -t--tabsオプションで指定された場合,それらは空白およびカ ンマで分けられます.
-i
--initial
それぞれの行の最初のタブ(前にあるものが全て非スペース文字や非タブ文字と なるもの)をスペースに変換します.


Node:unexpand invocation, Previous:expand invocation, Up:Operating on characters

unexpand: スペースをタブに変換する

unexpandは,与えられたそれぞれのfile,または与えられない場 合や-fileに対しては標準入力の内容を,2つ以上のスペースや タブ文字の文字列を,必要とされる多くのスペースと同等の,続けることが可能 な多くのタブに変換しながら,内容を標準出力に書き出します.概要です.

unexpand [option]... [file]...

デフォルトで,unexpandは,最初のスペースとタブ(前にあるものが全て 非スペース文字や非タブ文字となるもの)のみを,ぞれぞれの行で変換します. それは,出力でバックスペース文字を維持します.タブの計算に対し,列の数を 少なくします.デフォルトで,タブは8列毎に設定されます.

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


-tab1[,tab2]...
-t tab1[,tab2]...
--tabs=tab1[,tab2]...
1つのタブストップのみ与えられた場合,タブを,デフォルトの8の代わりに,そ れぞれtab1スペースに設定します.それ以外の場合,タブをtab1列, tab2列,... (0から番号付けされる)に設定し,与えられたタブストッ プ以降のスペースタブは,変更されずに残ります.タブストップが-t--tabsオプションで指定された場合,それらは空白とカンマで分けられ ます.オプションは暗黙に-aオプションを指定します.
-a
--all
最初のものだけでなく,全ての2つ以上のスペースやタブをタブに変換します.


Node:Opening the software toolbox

ソフトウェア・ツールボックスを開く(Opening the software toolbox)

この章はもともとLinux Journal,volume 1,number 2のWhat's GNU?で記載されました.それは,Arnold Robbinsによって書かれました.


Node:Toolbox introduction, Next:, Up:Opening the software toolbox

ツールボックスの紹介

今月のコラムは,GNUプロジェクトの周辺に関連するもので,そこでは,Linuxシ ステム上のGNUツールのいくつかと,それらの使われ方を記述します.それは正 に,プログラム開発と使用方法の"ソフトウェアツール"の哲学です.

ソフトウェアツールの哲学は,初期設計と(LinuxとGNUが本質的に複製している) Unixの開発では,重要で不可欠な概念でした.不幸にも,インターネットワーキ ングと派手なGUIの現在の出版では,それは王道からそれてしまっているように 感じられます.それは強力な多くの種類の問題を解決するための精神的なモデル を提供するので残念です.

多くの人は,ズボンのポケット(またはハンドバッグ)に,スイスのアーミーナイ フを持ち運んでいます.スイスのアーミーナイフは有用なハンディーツールです. それはいくつかのナイフの刃,ネジ回し,毛抜き,楊子,爪やすり,栓抜き,そ しておそらくその他のいくつかがあります.毎日の,単純な汎用のツールが必要 な小さな様々な仕事でおあつらえ向きです.

一方,経験豊富な大工は,スイスのアーミーナイフを使用して家を建てません. その代わりに,専門的な道具--のこぎり,かなづち,ネジ回し,かんな等がぎっ しり詰まった道具箱を持っています.そして,それぞれの道具を使用する時と場 所を知っています.ネジ回しを扱いながら,釘を打っているところを見たことは ないでしょう.

ベル研究所のUnix開発者は,全て専門的なプログラマと訓練されたコンピュータ 科学者です.彼らは,1つのプログラムのみを利用するため,1つで全てに適する プログラムをユーザに提示する一方,そのようなプログラムは以下のようになる ことが分かりました.

  1. 書くのが難しい.
  2. 管理とデバックが難しい.
  3. 新しい状況に対し拡張が難しい.

その代わりに,プログラムは専門的なツールであるべきだと感じました.要する に,それぞれのプログラムは,"1つのことを上手にすべきである"ということ です.それ以上でも以下でもありません.そのようなプログラムは,設計,作成 がより単純で,正しいものを得られます--ただ1つのことをするだけです.

更に彼らは,良いマシンでプログラムを一緒にハックするため,全体は部分の集 合より偉大なことに気付きました.いくつかの特別な目的のプログラムを組み合 わせることで,プログラムが設計された目的には無い特定の仕事を達成したり, 特定目的のプログラムを書く必要がある場合,より速く簡単にそれを達成したり できました.我々は,このコラムでこれ以上の,いくつかの(古い)例を見ます. (重要な追加点は,まだいくつかのアプリケーションがツールボックスに無い場 合,必要があれば回り道して,最初に必要なソフトウェアツールを構築すること です.)


Node:I/O redirection, Next:, Previous:Toolbox introduction, Up:Opening the software toolbox

I/O リダイレクション

希望としては,皆さんが,"標準入力","標準出力",そして"標準エラー出 力" の特定の概念で,シェルのI/Oリダイレクションの基本に慣れています.要 するに,"標準入力"はデータソースで,データがやってくるところです.デー タソースが,ディスクファイル,キーボード,磁気テープやパンチカードかどう か,プログラムは知る必要も注意する必要もありません.同様に,"標準出力" はデータシンクで,データが出て行くところです.プログラムはその場所を知る 必要も注意する必要もありません.標準入力を読み込み,データに何かを行い, それを送り続けるプログラムは,"フィルタ"と呼ばれ,それは水のパイプライ ンでのフィルタに似ているためです.

Unixシェルを用いた場合,データパイプラインを設定することは非常に簡単です.

program_to_create_data | filter1 | .... | filterN > final.pretty.data

我々は生データを作ることから始めます.それぞれのフィルタは,それがパイプ ラインから出てくるまで,いくつかの連続した変換をデータに適用し,それは望 ましい形式です.

これは素晴らしく,標準入力と標準出力に適しています.標準エラー出力は,動 作中どこに行きますか? まあ,上記のパイプラインfilter1について考 えて見てください.データでエラーが発生した場合,何が生じるのでしょう? エラーメッセージを標準出力に書き出す場合,それはfilter2の入力のパ イプラインの下に隠れ,ユーザーはおそらく見ることはありません.そのため, プログラムはユーザに注意を促すため,エラーメッセージを送ることが可能な場 所が必要です.これは標準エラー出力で,画面から離れているプログラムの標準 出力をリダイレクトしてさえ,それは通常コンソールやウィンドウに連結してい ます.

フィルタプログラムが一緒に動作するため,データの書式は合意されている必要 があります.最も簡単で最も容易な書式は,単なるテキストの行です.通常, Unixデータファイルは,慣習でUnixの文献で"改行"と呼ばれる,ASCII LF (Line Feed)文字で分けられた行を用いた,単なるバイトのストリーム です.(これは,Cプログラマの場合は'\n'です.)これは全ての伝統的な フィルタプログラムで用いられる書式です.(多くのより早期のオペレーティン グシステムは,バイナリデータを管理するため,手の込んだファシリティと特別 な目的を持つプログラムがありました.Unixは常にそのようなことから身をかわ していて,哲学の下では,テキストエディタでデータを見たり編集したりするこ とを単純に可能にする,最も簡単な方法です.)

OK,十分紹介しました.いくつかの道具をひと目見て,それから,興味深い方法 でそれらを一緒に束ねる方法を見ましょう.以下の議論では,これらの興味ある コマンドラインオプションを紹介するだけです.常に行うように,完全な話とす るために,システムドキュメントを再点検してください.


Node:The who command, Next:, Previous:I/O redirection, Up:Opening the software toolbox

whoコマンド

最初のプログラムはwhoコマンドです.単独では,それは現在ログインし ているユーザのリストを生成します.私はシングルユーザシステムでこれを書い ていますが,我々は複数の人々がログインしているふりをします.

$ who
arnold   console Jan 22 19:57
miriam   ttyp0   Jan 23 14:19(:0.0)
bill     ttyp1   Jan 21 09:32(:0.0)
arnold   ttyp2   Jan 23 20:48(:0.0)

ここで,$は通常のシェルプロンプトで,そこで私はwhoと入力し ました.3人ログインしていて,私は2回ログインしてます.伝統的なUnixシステ ムでは,ユーザ名は8文字以上の長さはありません.このわずかな平凡なビット は後で有用になります.whoの出力は良いのですが,データは余り面白く ありません.


Node:The cut command, Next:, Previous:The who command, Up:Opening the software toolbox

cutコマンド

次に我々が見るプログラムはcutコマンドです.このプログラムは,入力 データの列やフィールドを切り取ります.例えば,我々はそれを用いて, /etc/passwdファイルからログイン名とフルネームのみを出力させること ができます./etc/passwdファイルは,7つのフィールドがあり,コロン で分かれています.

arnold:xyzzy:2076:10:Arnold D. Robbins:/home/arnold:/bin/ksh

1番目と5番目のフィールドを得るため,以下のようにcutを使用します.

$ cut -d: -f1,5 /etc/passwd
root:Operator
...
arnold:Arnold D. Robbins
miriam:Miriam A. Robbins
...

-cオプションを用いた場合,cutは,入力行の指定した文字(例え ば,列)を切り出します.このコマンドは,データのフィルタリングに役立ちそ うです.


Node:The sort command, Next:, Previous:The cut command, Up:Opening the software toolbox

sortコマンド

次に見るのはsortコマンドです.これはUnix形式のシステムで最も強力 なコマンドの1つです.自分で良く利用していると思うのは,おしゃれなデータ の配管を設定している時です.sortコマンドは,コマンドラインで指名 されたそれぞれのファイルを読み込みソートします.それはソートされたデータ を統合し,標準出力に書き出します.それはファイルがコマンドラインで与えら れない場合,標準入力から読み込みます(このため,フィルタになります).ソー トは,順序を正しくするとき文字を基本としたり,ユーザが供給する基準の順番 を基本としたりします.


Node:The uniq command, Next:, Previous:The sort command, Up:Opening the software toolbox

uniqコマンド

(少なくとも今のところ)最後に,我々はuniqプログラムを見ます.デー タをソートするとき,重複行,すなわち同一行でよく終ります.通常,それぞれ の行に1つのインスタンスが必要です.これはuniqを用いる場所です. uniqはその標準入力から読み込み,それはソートされてることを期待し ます.それは重複行の1つのコピーのみを出力します.それにはいくつかのオプ ションがあります.後に,我々は-cオプションを使用し,それはそれぞ れユニークな行を出力し,入力で行が発生した回数の数えたものを前置します.


Node:Putting the tools together, Previous:The uniq command, Up:Opening the software toolbox

ツールの統合

さて,これが多数のユーザがログインしている大きなBBSシステムだと考えましょ う.管理者はシスオペに,ログインしているユーザのソートされたリストを生成 するプログラムを書かせたいとします.更に,ユーザが複数回ログインしていて も,彼または彼女の名前を出力に1度しか表示させないものとします.

シスオペはシステムドキュメントを持って席に付き,これを行うCプログラムを 書いたはずです.それはおそらく,200行のコードを書いて,テストして,デバッ グするため,2時間かけているでしょう.しかし,ソフトウェアツールボックス を知っている場合,シスオペは代わりに,ログインしているユーザのリストを生 成することから始めることができます.

$ who | cut -c1-8
arnold
miriam
bill
arnold

次に,リストをソートします.

$ who | cut -c1-8 | sort
arnold
arnold
bill
miriam

終りに,重複を取り除くため,ソートされたリストをuniqに通します.

$ who | cut -c1-8 | sort | uniq
arnold
bill
miriam

sortコマンドには,実際は,uniqを行う-uオプションが あります.しかし,uniqは,sort -uで代用できない他のユーザ のためです.

シスオペは,このパイプラインをシェルスクリプトに置き,システムの全てのユー ザが利用可能にしました.

# cat > /usr/local/bin/listusers
who | cut -c1-8 | sort | uniq
^D
# chmod +x /usr/local/bin/listusers

ここで注意すべき主な点が4つあります.最初に,4つのプログラムのみのコマン ドラインで,シスオペは仕事に費す2時間を節約することができました.さらに, シェルパイプラインはCプログラムが行うのと同じ効果があり,それはプログラ マの時間に関してはるかに効果的です.人々の時間はコンピュータの時間よりも はるかに高価で,現在の"全てのことをする十分な時間が無い"社会では,プロ グラマの時間の2時間を節約することは,並々ならぬ目ざましい成果です.

2番目に,ツールの組み合わせで,個別のプログラマの著者が想像してい なかった特定の目的の仕事をすることが可能だということを強調することも重要 です.

3番目に,我々がここで行ったように,ステージ内ででパイプラインを組み上げ ることも価値があります.これで,パイプラインのそれぞれのステージでのデー タを見ることが可能になり,それは,これらのツールを全く正しく使用している ことの確信を得る助けになります.

最後に,シェルスクリプトでパイプラインを組み上げることで,他のユーザがそ のコマンドを使用することができ,それらを設定したおしゃれな配管を覚える必 要がありません.それを実行する方法という意味では,シェルスクリプトとコン パイルされたプログラムは区別できません.

ここまでの準備運動の後で,我々は2つの追加のより複雑なパイプラインを見ま す.そのため,我々が2つのツールをさらに紹介する必要があります.

最初はtrコマンドで,それは"transliterate(変換)"を意味します. trコマンドは,文字対文字を基本に,文字を変換する作用があります. 通常,それは大文字を小文字に割り当てることに使用されます.

$ echo ThIs ExAmPlE HaS MIXED case! | tr '[A-Z]' '[a-z]'
this example has mixed case!

重要ないくつかのオプションがあります.

-c
リストアップされた文字の補集合で動作し,すなわち,与えられた集合に無い文 字に適応した処理です.
-d
出力から最初のセットの文字を削除します.
-s
出力で繰り返される文字を1文字に圧縮します.

我々は,一度に3つの全てのオプションを使用します.

我々が見る,もう1つのコマンドはcommです.commコマンドは,2 つのソートされた入力ファイルを入力データとし,ファイルの行を3列に出力し ます.出力列は最初のファイルのユニークなデータ行.2番目のファイルのユニー クなデータ行,そして,両方に共通なデータ行です.-1-2-3のコマンドラインオプションは,対応する列を削除します.(これは直 観的ではなく,慣れるのに少しかかります.)例えば,以下のようにします.

$ cat f1
11111
22222
33333
44444
$ cat f2
00000
22222
33333
55555
$ comm f1 f2
        00000
11111
                22222
                33333
44444
        55555

ファイル名としての単一のダッシュは,通常のファイルの代わりに標準入力から 読みとるよう,commに伝えます.

さて,我々はおしゃれなパイプラインを構築する準備ができました.最初の応用 は,単語の頻度カウンタです.これは,著者が特定の単語を過度に使用している かどうかを決定する助けとなります.

最初のステップは,入力ファイルの全ての文字の大文字小文字をどちらか1つに 変換することです."The"と"the"は数えているときは同じ単語です.

$ tr '[A-Z]' '[a-z]' < whats.gnu | ...

次のステップは,句読点をを取り除くことです.引用された単語と引用されてい ない単語は,同一に扱われるべきです.句読点を片付ける最も簡単な方法です.

$ tr '[A-Z]' '[a-z]' < whats.gnu | tr -cd '[A-Za-z0-9_ \012]' | ...

2番目のtrコマンドは,リストアップされた文字の補集合を処理し,それ は全ての文字,数字,アンダースコアと空白です.\012は改行を表現し ます.それはそのまま残す必要があります.(ASCIIタブ文字も,生成され たスクリプトでは追加として含まれるべきです.)

この時点で,我々は,空白スペースで分けられた単語からなるデータを持ってい ます.単語は英数文字(とアンダースコア)のみ含みます.次のステップは,1行 に1単語となるように,データを別々に分けます.これは数える処理をより容易 にするためで,まもなく見ることができます.

$ tr '[A-Z]' '[a-z]' < whats.gnu | tr -cd '[A-Za-z0-9_ \012]' |
> tr -s '[ ]' '\012' | ...

このコマンドは空白を改行に切替えます.-sオプションは,出力の複数 の改行文字を1つに圧縮します.これは空白行を避けたいとき助かります. (>はシェルの"2番目のプロンプト"を意味します.これは,全てのコマ ンドを入力し終えていないことに注意させるとき,シェルが出力するものです.)

我々は今,1行に1単語で,句読点が無く,全て大文字小文字どちらかだけのデー タを持っています.我々はそれぞれの単語を数える準備ができました.

$ tr '[A-Z]' '[a-z]' < whats.gnu | tr -cd '[A-Za-z0-9_ \012]' |
> tr -s '[ ]' '\012' | sort | uniq -c | ...

この時点で,データは以下のようになります.

  60 a
   2 able
   6 about
   1 above
   2 accomplish
   1 acquire
   1 actually
   2 additional

出力は単語でソートされていて,総数ではありません! 我々が欲しいのは,最 も頻繁に使用される最初のものです.幸い,これは簡単に達成でき,2つの sortオプションの助けを借ります.

-n
文字ではなく,数字のソートを行います.
-r
ソートされた順序を反転します.

最終的なパイプラインはこのようになります.

$ tr '[A-Z]' '[a-z]' < whats.gnu | tr -cd '[A-Za-z0-9_ \012]' |
> tr -s '[ ]' '\012' | sort | uniq -c | sort -nr
 156 the
  60 a
  58 to
  51 of
  51 and
 ...

やれやれ! それは大量の要約です.まだ同じ原則は適用されます.6つのコマン ド2行で(本当は利便性のため長いものを分けたものです),我々は興味深く便利 なことを行うプログラムを作成し,それは,Cプログラムで同じことをするもの を書くよりはるかに短い時間でした.

上記のパイプラインへのちょっとした変更で,単純なスペルチェッカーを与える ことができます.単語を正しく綴っているかどうかを決定するために行う必要が あることは,辞書で調べることです.それが無い場合,可能性としては綴りが正 しくないということです.そのため,我々は辞書が必要です.Slackware Linux 配布物を持っている場合,ファイル/usr/lib/ispell/ispell.wordsがあ り,それはソートされていて,38,400語の辞書です.

さて,我々のファイルと辞書をいかにして比較するのでしょう? 以前に我々は, ソートされた,1行に1単語の単語リストを生成しました.

$ tr '[A-Z]' '[a-z]' < whats.gnu | tr -cd '[A-Za-z0-9_ \012]' |
> tr -s '[ ]' '\012' | sort -u | ...

さて,必要なことは辞書に無い単語リストです.ここが,commコ マンドを用いる場所です.

$ tr '[A-Z]' '[a-z]' < whats.gnu | tr -cd '[A-Za-z0-9_ \012]' |
> tr -s '[ ]' '\012' | sort -u |
> comm -23 - /usr/lib/ispell/ispell.words

-2-3オプションは,辞書(2番目のファイル)のみにある行と, 両方のファイルにある行を削除します.最初のファイル(我々の単語ストリーム の標準入力)のみにある行は,辞書にはありません.これらは綴りエラーに対す る好ましい候補です.このパイプラインは,Unixでのスペルチェッカー製品とし て,最初に発生しました.

ちょっと記述する価値のある,その他のツールもあります.

grep
正規表現に一致するテキストをファイルで検索します.
egrep
grepに似ていますが,より強力な正規表現を用います.
wc
行,単語,文字を数えます.
tee
データパイプに対するT部品で,データをファイルと標準出力にコピーします.
sed
ストリームエディタで,より進んだツールです.
awk
データ操作言語で,もう1つのより進んだツールです.

ソフトウェアツールの哲学は,以下の短い助言も含んでいます."難しい部分は 他人にさせろ".これは,必要なほとんどのものは与えられるものであり,必要 な形式にするまでの方法が残っていることを意味します.

要約します.

  1. それぞれのプログラムは,1つのことでうまく働きます.それ以上でもそれ以下 でもありません.
  2. 適切な配管でプログラムを組み合わせることで,全体として部分の総和以上の結 果を導きます.それは,著者が想像していなかったプログラムの新しい使用法も 導きます.
  3. プログラムは,決して余分なヘッダや末尾のデータを出力すべきではなく,それ はこれらがパイプラインを壊してしまうものを送るはずだからです.(この点は 以前に記述していません.)
  4. 難しいことは,他人にさせましょう.
  5. ツールボックスを理解してください! それぞれのプログラムを適切に使用して ください.適切なツールが無い場合,それを構築してください.

ここで書いている我々が議論してきた全てのプログラムは, /pub/gnu/textutils-1.9.tar.gzとして,prep.ai.mit.eduからの 匿名ftpで利用可能です.2

私がこのコラムで表現したものに新しいものはありません.ソフトウェアツール の哲学は,最初に,Brian KernighanとP.J. PlaugerによるSoftware Toolsの本(Addison-Wesley, ISBN 0-201-03669-X)で紹介されました.この本は, ソフトウェアツールの書き方と使用法を表しています.それは1976年に書かれ, ratfor (RATional FORtran)という名のFORTRANに対するプリプロセッサ を使用しています.当時,Cは現在ほどubiquitousではなく,FORTRANはそうでし た.最後の章で,ratforをFORTRANにするプロセッサを提示していて, ratforで書かれています.ratforはCに非常に似ています.Cを知っ ている場合,コードを追いかけるのに問題ないでしょう.

1981年に本は更新され,Software Tools in Pascal (Addison-Wesley, ISBN 0-201-10342-7)として利用可能になりました.両方の本は印刷されていて, プログラマにとっては読む価値があります.それらは,確かにプログラミングを 見る方法で,主な変化をなし得ました.

初めに,両方の本のプログラムはAddison-Wesleyから(9トラックテープで)利用 可能でした.不幸にも,これはもはや利用できず,Internetの周辺でコピーがあ るかも知れません.何年もの間,活発なSoftware Tools Users Groupがあり,そ のメンバーは元のratforプログラムを,FORTRANコンピュータを持つ全て のコンピュータに本質的に移植しました.グループの人気は,Unixが大学を越え て広がり始めたので,80年代半ばで衰えました.

GNUコードとその他のUnixプログラムのクローンの現在の増殖で,これらのプロ グラムは,現在ほとんど注目されません.現在のCのバージョンはより効果的で, これらのプログラムが行うより多くのことを行います.にもかかわらず,良いプ ログラミングスタイルの博覧会と,still-valuableの哲学に対する福音として, これらの本は比べるものが無く,私は高く推薦します.

謝辞:私はこのコラムのレビューに対し,ベル研究所のBrian Kernighanと,オ リジナルのソフトウェアToolsmithに深く感謝したいと思います.


Node:Index

索引

Table of Contents


Footnotes

  1. JMでは,行間に空行を置くとなっていま す.

  2. Version 1.9が,このコラムを書い ているときの現在のものです.現在のバージョンは,近くのGNUアーカイブを調 査してください.主なGNU FTPサイトは,現在ftp.gnu.orgです.