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

7.3 uniq: ファイルから重複を省く

uniq は、指定された input ファイルにある行を、重複を省いて書き出す。 ファイルが指定されていない場合や、input として ‘-’ が指定されている場合は、標準入力を対象とする。

書式:

 
uniq [option]… [input [output]]

デフォルトでは、uniq は入力された行を表示するとき、 隣接する同一行があれば、出力に重複する行が現れないように、最初の行だけを残して、 残りの行を捨ててしまう。また、オプションによっては、重複しない行を捨てることや、 すべての隣接する同一行を捨てることもできる。

入力はソートされている必要はないが、重複する入力行が検出されるのは、 それが隣接しているときだけである。もし、隣接していない重複行も捨てたいのなら、 sort -u を使うとよいだろう。 See section sort: テキストファイルを並べ替える.

比較には LC_COLLATE ロケール・カテゴリが指定しているルールを使用する。

output ファイルが指定されていない場合、uniq は標準出力に書き出す。

このプログラムでは以下のオプションが使用できる。参照: 共通オプション.

-f n
--skip-fields=n

重複の検査を行う前に、各行のフィールドを n 個スキップする。その行に n 個より少ないフィールドしかない場合は、比較に空の文字列を使用する。 フィールドとは、少なくとも 1 個以上のスペースやタブで間を区切られた、スペースやタブを含まない文字の連続である。

互換性のために、uniq は ‘-n’ という旧来のオプション書式をサポートしている。 新しいスクリプトでは、‘-f n’ の方を使うべきである。

-s n
--skip-chars=n

重複の検査を行う前に、n 文字スキップする。 その行に n 個より少ない文字しかない場合は、比較に空の文字列を使用する。 フィールドをスキップするオプションと、文字をスキップするオプションの両方を使っている場合は、 フィールドのスキップが先に行われる。

POSIX 1003.1-2001 に準拠していないシステムでは、uniq が ‘+n’ という旧来のオプションの書式をサポートしている。 この旧来の書式は、環境変数 _POSIX2_VERSION を使えば、コントロールできるが (see section 規格への準拠)、 移植を考慮したスクリプトでは、この環境変数に動作が依存するコマンドの使用は、避けた方がよい。 たとえば、‘uniq +10’ ではなく、‘uniq ./+10’ や ‘uniq -s 10’ を使うべきだ。前者では、‘+10’ が、オプションかファイル名か、まぎらわしいからである。

-c
--count

各行に出現回数を付けて表示する。

-i
--ignore-case

行を比較するとき、アルファベットの大文字小文字を区別しない。

-d
--repeated

重複していない行を除去する。このオプションを単独で使った場合、uniq は、連続する同一行のうち、最初の 1 行だけを表示し、それ以外の何も表示しない。

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

入力行のうち、連続する同一行の二行目以降を除去せず、重複していない行だけを除去する。 このオプションが役に立つのは、主として、大文字小文字を無視するとか、 選択したフィールドのみを比較するとかいった、他のオプションと組み合わせて使うときである。 長い書式のオプションで使用できる delimit-method は、 省略可能であり、指定した場合は、重複行のグループ間の区切り方を指示することになる。 delimit-method は、以下の一つでなければならない。

none

重複行のグループ間に、区切りの印を置かない。‘--all-repeated’ (‘-D’) とのみ指定するのと同じことである。

prepend

重複行の各グループの前に改行を出力する。 ‘--zero-terminated’ (‘-z’) を指定している場合は、 区切りの印として改行の代わりに、ゼロバイト (ASCII NUL) を使用する。

separate

重複行のグループ間を 1 個の改行で分離する。これは、‘prepend’ を使うのとほぼ同じだが、最初のグループの前に区切りの印を挿入しないのが異なっている。 それ故、ユーザが出力を直接見る場合に、より適しているかもしれない。‘--zero-terminated’ (‘-z’) を指定している場合は、 区切りの印として改行の代わりに、ゼロバイト (ASCII NUL) を使用する。

注意していただきたいが、グループ同士を改行で分離しているとき、 入力ストリームに複数の空行があると、出力がまぎらわしいものになる。 これを避けるには、入力を ‘tr -s '\n'’ でフィルタリングして、 複数の空行をなくせばよい。

このオプションは、GNU による拡張である。

--group[=delimit-method]

すべての行を出力し、他と区別される各グループの間に区切りを入れる。 ‘--zero-terminated’ (‘-z’) を指定している場合は、 区切りの印として改行の代わりに、ゼロバイト (ASCII NUL) を使用する。 delimit-method は省略可能であり、指定した場合は、グループ間の区切り方を指示することになる。 delimit-method は、以下の一つでなければならない。

separate

他と区別されるグループを 1 個の区切りの印で分離する。 これが、何も指定されていないときの、デフォルトの区切り方であり、 出力をユーザに直接見せる場合に適している。

prepend

他と区別される各グループの前に区切りの印を出力する。

append

他と区別される各グループの後ろに区切りの印を出力する。

both

他と区別される各グループの前後に区切りの印を出力する。

注意していただきたいが、グループ同士を改行で分離しているとき、 入力ストリームに複数の空行があると、出力がまぎらわしいものになる。 これを避けるには、入力を ‘tr -s '\n'’ でフィルタリングして、 複数の空行をなくせばよい。

このオプションは、GNU による拡張である。

-u
--unique

重複する入力行のグループを表示するときは (訳注: すなわち、‘--all-repeated’ (‘-D’) オプションを使用しているときは)、グループの最後の行を表示しない。 このオプションを単独で使用する場合は、ユニークな (訳注: この場合は、同一行が連続していないという意味) 行だけを表示し、それ以外の何も表示しない。

-w n
--check-chars=n

各行で (フィールドや文字をスキップする指定があれば、スキップした後で) 文字を何個まで比較するかを指定する。デフォルトでは、行の残り全部が比較の対象になる。

-z
--zero-terminated

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

終了ステータス 0 は成功を示し、0 以外の値は失敗を示す。


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

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