Uniq コマンドは、ファイル内の重複エントリを削除または検出するのに役立ちます。このチュートリアルでは、役立つと思われる最も頻繁に使用される uniq コマンド ライン オプションについて説明します。
次のテスト ファイルは、uniq コマンドの動作を理解するために、いくつかの例で使用されています。
$ cat test aa aa bb bb bb xx
1.基本的な使い方
構文:
$ uniq [-options]
たとえば、オプションなしで uniq コマンドを実行すると、重複する行が削除され、以下に示すように一意の行が表示されます。
$ uniq test aa bb xx
2. -c オプションを使用して出現回数をカウント
このオプションは、ファイル内の行の出現をカウントします。
$ uniq -c test 2 aa 3 bb 1 xx
3. -d オプションを使用して重複行のみを出力
このオプションは、ファイル内の重複した繰り返し行のみを印刷することです。以下に示すように、テスト ファイルで重複していないため、「xx」行は表示されませんでした。
$ uniq -d test aa bb
上記の例では、すべての重複行が表示されましたが、1 回だけ表示されました。ただし、この -D オプションは、ファイル内のすべての重複行を出力します。たとえば、行「aa」はテスト ファイルに 2 回あったため、次の uniq コマンドはこの出力に行「aa」を 2 回表示しました。
$ uniq -D test aa aa bb bb bb
4. -u オプションを使用して一意の行のみを出力
このオプションは、ファイル内の一意の行のみを印刷することです。
$ uniq -u test xx
特定のパターンを使用してファイルから重複行を削除したい場合は、sed delete コマンドを使用できます。
5. -w オプションを使用して比較を「N」文字に制限
このオプションは、比較を最初に指定された「N」文字のみに制限します。この例では、次の test2 入力ファイルを使用します。
$ cat test2 hi Linux hi LinuxU hi LinuxUnix hi Unix
オプション「w」を使用した次の uniq コマンドは、ファイル内の行の最初の 8 文字を比較し、次に「c」オプションを使用して、ファイルの行の出現回数を出力します。
$ uniq -c -w 8 testNew 3 hi Linux 1 hi Unix
オプション「w」を使用した次の uniq コマンドは、ファイル内の行の最初の 8 文字を比較し、次に「D」オプションを使用して、ファイルのすべての重複行を出力します。
$ uniq -D -w 8 testNew hi Linux hi LinuxU hi LinuxUnix
6. -s オプションを使用して最初の「N」文字を比較しない
このオプションは、最初に指定された「N」文字の比較をスキップします。この例では、次の test3 入力ファイルを使用します。
$ cat test3 aabb xxbb bbc bbd
オプション「s」を使用した次の uniq コマンドは、ファイル内の行の最初の 2 文字の比較をスキップし、次に「D」オプションを使用すると、ファイルのすべての重複行を出力します。
ここで、最初の 2 文字、つまり 1 行目の「aa」と 2 行目の「xx」は比較されず、両方の行の次の 2 文字「bb」は同じであるため、重複した行として表示されます。
$ uniq -D -s 2 test3 aabb xxbb
7. -f オプションを使用して最初の「N」フィールドを比較しない
このオプションは、ファイル内の行の最初に指定された「N」フィールドの比較をスキップします。
$ cat test2 hi hello Linux hi friend Linux hi hello LinuxUnix
オプション「f」を使用した次の uniq コマンドは、ファイル内の行の最初の 2 フィールドの比較をスキップし、次に「D」オプションを使用して、ファイルのすべての重複行を出力します。
ここで、最初の 2 つのフィールド、つまり 1 行目の「こんにちは」と 2 行目の「こんにちは友達」は比較されず、両方の行の次のフィールド「Linux」は同じであるため、重複した行として表示されます。
$ uniq -D -f 2 test2 hi hello Linux hi friend Linux