Skip to content

uniq#

uniq は、テキストファイルやテキストストリームの重複する行をフィルタリングするための UNIX および UNIX ライクなオペレーティングシステムのコマンドラインツールです。 具体的には、連続する重複行を単一の行にまとめます。

以下は uniq の基本的な使い方とオプションの一部です:

  1. 基本的な使用方法:

    uniq file.txt
    
    これにより、file.txt の連続する重複行が除去されます。

  2. 重複した行の数を表示:

    uniq -c file.txt
    
    このコマンドは、各行の出現回数とともにその行を出力します。

  3. 重複していない行のみを表示:

    uniq -u file.txt
    
    このコマンドは、ファイル内で一度しか出現しない行のみを出力します。

  4. すべての重複する行を表示:

    uniq -d file.txt
    
    このコマンドは、ファイル内で複数回出現する行を一度だけ出力します。

  5. 特定のフィールドや文字での比較:

    uniq -f 1 file.txt
    
    または
    uniq -s 2 file.txt
    
    -f オプションは、先頭から指定した数のフィールドを無視して比較します。 -s オプションは、先頭から指定した数の文字を無視して比較します。

uniq は、sort コマンドと組み合わせて使用されることがよくあります。sort でデータをソートした後、uniq で重複を削除するという手順です。例:

sort file.txt | uniq

これは、ファイルの内容をソートし、その後に重複する行を削除します。

以上が uniq の基本的な概要と使い方です。

オプション#

もちろん、uniq コマンドの主なオプションについて詳しく説明します:

  1. -c または --count: 連続する重複行の出現回数とともに、その行を出力します。

  2. -d または --repeated: ファイル内で複数回出現する行を一度だけ出力します。

  3. -D: すべての重複する行を出力します。

  4. -f N または --skip-fields=N: 先頭から N 個のフィールドを無視して比較します。フィールドは空白文字(スペースやタブ)で区切られます。

  5. -i または --ignore-case: 大文字と小文字の違いを無視して比較します。

  6. -s N または --skip-chars=N: 先頭から N 文字を無視して比較します。

  7. -u または --unique: 重複していない行のみを出力します。

  8. -w N または --check-chars=N: 各行の先頭から N 文字のみを比較に使用します。これを超える部分は無視されます。

  9. -z または --zero-terminated: 行の終わりを示すために改行文字の代わりに NULL 文字を使用します。これは、特定のシナリオでバイナリデータを扱う場合や、ファイル名に改行が含まれる場合などに役立ちます。

これらのオプションを組み合わせることで、さまざまな条件での重複のチェックやフィルタリングが可能になります。

オプション(使用例)#

uniq コマンドのオプションを使った具体的な使用例をいくつか紹介します。

  1. 重複行の出現回数とともに表示:

    echo -e "a\na\nb\nc\nc\nc" | uniq -c
    
    出力:
    2 a
    1 b
    3 c
    

  2. 大文字小文字を無視して重複を削除:

    echo -e "A\na\nB\nb" | uniq -i
    
    出力:
    A
    B
    

  3. 最初のフィールドを無視して重複をチェック: 以下の例では、最初の数字を無視して重複をチェックします。

    echo -e "1 apple\n2 apple\n3 banana" | uniq -f 1
    
    出力:
    1 apple
    3 banana
    

  4. 最初の2文字を無視して重複をチェック:

    echo -e "ab1\nab2\nac1" | uniq -s 2
    
    出力:
    ab1
    ac1
    

  5. 各行の最初の3文字だけで重複をチェック:

    echo -e "abc123\nabc456\ndef789" | uniq -w 3
    
    出力:
    abc123
    def789
    

  6. 重複していない行のみを表示:

    echo -e "a\na\nb\nc\nc\nc" | uniq -u
    
    出力:
    b
    

これらの例を参考に、uniq コマンドのオプションを組み合わせてさまざまな条件での重複チェックやフィルタリングを行うことができます。