前回の記事でsortコマンドを見てきましたが、ファイルを並べ替えると、多くの場合、互いに隣接する多くの重複行が発生します。これらの線を正しく表示するのが難しくなります。
このシナリオでは、uniq
コマンドは、出力に重複する行を1回印刷するのに役立ちます。実際には、繰り返される行を破棄し、隣接する最初の繰り返される行を印刷します。これにより、出力を正しく表示できます。
uniq
の入力ファイルで使用される行 コマンドの長さは2048バイト(改行文字を含む)を超えたり、ヌル文字を含めたりすることはできません。
構文
uniq [OPTION]... [INPUT [OUTPUT]]
例
以下は、オプションなしで始まる一連の例です。いくつかのユースケースを見ていきます。 uniq
のみを含むものもあります 、およびその他は追加のコマンドに依存しています。
オプションなし
以下はfile2という名前のファイルです 、いくつかのデータが含まれています。このファイルはソートされておらず、重複する行は互いに隣接していないことに注意してください。 uniq
を使用する前に このファイルでコマンドを実行するには、sort
する必要があります それ。この例では、uniq
を試しました 元のファイルを使用してコマンドを実行しますが、cat
のように、出力をそのまま出力するだけです。 出力。次の例では、sort
から出力を取得します コマンドを実行し、uniq
でパイプします 指図。これは、uniq
の動作を理解するのに役立ちます コマンド:
$ cat file2
ChhatrapatiShahuMaharaj
Dr.B.R.Ambedkar
Budhha
Dr.B.R.Ambedkar
Budhha
Dr.B.R.Ambedkar
Budhha
$ uniq file2
ChhatrapatiShahuMaharaj
Dr.B.R.Ambedkar
Budhha
Dr.B.R.Ambedkar
Budhha
Dr.B.R.Ambedkar
Budhha
$ sort file2
Budhha
Budhha
Budhha
ChhatrapatiShahuMaharaj
Dr.B.R.Ambedkar
Dr.B.R.Ambedkar
Dr.B.R.Ambedkar
$ sort file2 | uniq
Budhha
ChhatrapatiShahuMaharaj
Dr.B.R.Ambedkar
-c、-countオプションを使用
以下の次の例では、-c
を使用しています 繰り返される行をカウントするオプション。 uniq
コマンドは、その行のプレフィックスとしてカウントされるものを出力します。次の例は、最初の行が3回繰り返され、2番目の行が1回繰り返され、3番目の行が3回繰り返されることを示しています。
$ sort file2 | uniq -c
3 Budhha
1 ChhatrapatiShahuMaharaj
3 Dr.B.R.Ambedkar
-d、-repeatedオプションを使用
-d
オプションは、繰り返される行のみを出力します。重複していない行は破棄されます。したがって、 ChhatrapatiShahuMaharajの行 以下の例では破棄されています:
$ sort file2 | uniq -d
Budhha
Dr.B.R.Ambedkar
以下の例では、-c
を使用しました -d
かどうかをクロスチェックするオプション オプションは、繰り返される行のみを印刷するかどうかです:
$ sort file2 | uniq -cd
3 Budhha
3 Dr.B.R.Ambedkar
-Dを使用すると、-all-repeatedオプション
-D
オプションは、繰り返される行を出力し、重複しない行を破棄します。次の例では、uniq
コマンドは、重複するすべての行のみを出力し、重複しない行を破棄します:
$ sort file2 | uniq -D
Budhha
Budhha
Budhha
Dr.B.R.Ambedkar
Dr.B.R.Ambedkar
Dr.B.R.Ambedkar
-uを使用すると、-uniqueオプション
上記のオプションの反対に、-u
オプションは、一意の行、つまり重複しない行を印刷します。したがって、以下の例では、 ChhatrapatiShahuMaharajを出力します。 出力として:
$ sort file2 | uniq -u
ChhatrapatiShahuMaharaj
-iを使用すると、-ignore-caseオプション
-i
を使用する オプションの場合、文字の大文字と小文字の区別は無視できます。以下に、uniq
の出力を示します。 -i
がある場合とない場合のコマンド 比較するオプション:
$ cat file3
aaaa
aaaa
AAAA
AAAA
bbbb
BBBB
$ uniq file3
aaaa
AAAA
bbbb
BBBB
$ uniq -i file3
aaaa
bbbb
-fを使用すると、-skip-fields =N
重複する行をフィルタリングするために、一部のフィールドをスキップする必要がある場合があります。これは、-f
を使用して可能です オプション。次の例では、最初のフィールド(最初の列)をスキップして、2番目のフィールドの重複行を比較しています。 -f
がある場合とない場合の両方の例を示しましたが、 オプションの動作をよりよく理解するためのオプション:
$ cat file5
Amit aaaa
Ajit aaaa
Advi bbbb
Kaju bbbb
$ uniq file5
Amit aaaa
Ajit aaaa
Advi bbbb
Kaju bbbb
$ uniq -f 1 file5
Amit aaaa
Advi bbbb
[読者も気に入っています:Linuxコマンドラインでのパイプの操作]
-sを使用すると、-skip-char=Nオプション
フィールドと同様に、-s
を使用して文字をスキップすることもできます オプション。 uniq
コマンドは最初の重複行のみを出力し、他の重複行を破棄します。したがって、 33aa および55bb 破棄されました。次に例を示します。
$ cat file4
22aa
33aa
44bb
55bb
$ uniq file4
22aa
33aa
44bb
55bb
$ uniq -s 2 file4
22aa
44bb
-wを使用すると、-check-chars=Nオプション
文字をスキップするのと同じように、-w
を使用して文字を検討することもできます。 例のようなオプション:
$ cat file6
aa12
aa34
bb56
bb78
$ uniq file6
aa12
aa34
bb56
bb78
$ uniq -w 2 file6
aa12
bb56
--versionオプション付き
--version
を使用します uniq
のバージョンを確認するオプション コマンド。
$ uniq --version
uniq (GNU coreutils) 8.4
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Written by Richard M. Stallman and David MacKenzie.
[無料ダウンロード:高度なLinuxコマンドのチートシート。 ]
まとめ
uniq
隣接していない限り、繰り返される線は検出されません。 uniq
コマンドは、繰り返される行の数をカウントして出力できます。重複行と同様に、一意の行(重複しない行)もフィルタリングでき、大文字と小文字の区別も無視できます。重複する行を比較する前にフィールドと文字をスキップし、行をフィルタリングするための文字を検討することもできます。
複数のuniq
を確認した後 コマンドオプションについては、参照用に小さな画像を共有したいと思います。