前回の記事で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を確認した後 コマンドオプションについては、参照用に小さな画像を共有したいと思います。