[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

7.4 comm: ソート済みの二つのファイルを一行づつ比較する

comm は、二つの入力ファイルの共通する行と独自な行を、標準出力に区別して書き出す。 ‘-’ というファイル名は、標準入力を意味している。

書式:

 
comm [option]… file1 file2

入力ファイルは、comm に渡す前に、LC_COLLATE のロケールによって規定されている照合順序でソートされていなければならない。 入力ファイルが改行以外の文字で終わっている場合は、自動的に改行が追加される。 sort コマンドをオプションなしで実行すると、comm の入力にふさわしいファイルが必ず得られる。

オプションを付けずに実行すると、comm は 3 列の出力を生成する。 1 列目は file1 にのみある行であり、2 列目は file2 にのみある行、そして 3 列目は両方のファイルに共通する行である。各列は、1 個のタブ文字で区切られる。

-1’, ‘-2’, ‘-3’ というオプションは、対応する列 (と区切り記号) を表示しないようにする。 オプションについては、「共通オプション」の章も参照すること。 共通オプション.

比較のための他のユーティリティとは違って、comm の終了ステータスは、 比較結果の如何によらない。comm は、正常終了すると 0 の終了コードを返す。 エラーがあれば、0 以外のステータスで終了する。

--check-order’ を指定した場合、入力がソートされていないと、 エラーメッセージを出して、実行を中断する。‘--nocheck-order’ オプションを指定した場合は、入力がソートされていなくても、エラーメッセージを出すことはない。 どちらのオプションも指定されていない場合に、入力がソートされていないとの診断を下すのは、 片方の入力ファイルにもう一方と対にならない行が見つかったときだけである。 入力ファイルがソートされていないと診断すると、comm は 0 以外のステータスで終了する (従って、そうした出力は使用するべきではない)。

入力ファイルがきちんとソートされていず、しかも、対にならない行を含む場合に、 ‘--nocheck-order’ を指定して、そうしたファイルを comm で無理矢理処理しても、何か特定の結果をもたらすことは保証できない。 おそらく出力は、期待に添わないものになるだろう。

--check-order

入力ファイルのどちらかの内容がきちんとソートされていないと、 エラーメッセージを出して、実行に失敗する。

--nocheck-order

入力ファイルの内容がソートされた順番になっているかどうかを、 どちらのファイルについてもチェックしない。

その他のオプション。

--output-delimiter=str

出力における隣り合う列の間に、デフォルトのタブ文字 1 個ではなく、 str を出力する。

区切り記号の str は、空であってはならない。

--total

最後の行に要約を出力する。

通常の出力と同じように、1 列目は file1 にのみある行の合計数、 2 列目は file2 にのみある行の合計数、3 列目は両方のファイルに共通する行の合計数である。 さらに 4 列目に ‘total’ という文字が追加される。

次の例では、comm は通常の出力を省略して (‘-123’)、 要約のみを表示している。

 
$ printf '%s\n' a b c d e     > file1
$ printf '%s\n'   b c d e f g > file2
$ comm --total -123 file1 file2
1       2       4       total

このオプションは GNU の拡張である (coreutils 8.26 から)。 移植を考慮したスクリプトで合計数を出したければ、wc を使用するべきである。たとえば、上記の例なら、次のようにする。

 
$ comm -23 file1 file2 | wc -l    # file1 にのみある行の行数
1
$ comm -13 file1 file2 | wc -l    # file2 にのみある行の行数
2
$ comm -12 file1 file2 | wc -l    # 両方のファイルに共通する行の行数
4
-z
--zero-terminated

項目の区切りに、改行 (ASCII LF) ではなく、ゼロバイトを使用する。 すなわち、入力を ASCII NUL で分離された項目として扱い、出力する各項目の末尾に ASCII NUL を付加する。このオプションは、‘perl -0’, ‘find -print0’, ‘xargs -0’ などと組み合わせて使用すると、 便利なことがある。そうしたコマンドでも、わがままなファイル名を (空白などの特殊文字を含んでいる場合でも) きちんと確実に処理するために、 同様なことをしているのである。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

This document was generated on June 7, 2022 using texi2html 1.82.