Bashプログラミング
 Computer >> コンピューター >  >> プログラミング >> Bashプログラミング

Linuxのuniqコマンド徹底解説 – 重複行の検出・削除と使い方の実例集

本記事では、Linuxのuniqコマンドを使ってファイル内の重複行を検索・フィルタリングする方法を解説し、実際の使用例もあわせて紹介します。

uniqコマンドは、入力または指定したファイルの中から連続する重複行を出力したり省略したりできる、シンプルなコマンドです。

uniqコマンドの構文

uniqコマンドの基本構文は以下の通りです。

uniq OPTIONS INPUT OUTPUT

各要素の意味は次のようになっています。

  • OPTIONS: 下記の表にあるオプションを指定します
  • INPUT: 読み込むファイルへのパスを指定します
    • 標準入力を使用することも可能です
  • OUTPUT: uniqコマンドの結果を保存するファイルを指定します
    • 省略した場合は標準出力が使われます(デフォルトでは結果がコンソールに表示されます)

入力・出力ファイルを明示的に指定しない場合は、STDINやSTDOUTを使ってuniqコマンドに入出力をリダイレクトできます。詳細はリダイレクトに関する記事をご覧ください。

主なオプション一覧

以下は、ユーザーマニュアルに記載されているよく使われるオプションの一覧です。

オプション 説明
-c 各行の先頭に出現回数を付けて表示する
-d 連続して重複している行のみを表示する(各グループにつき1行)
-D 連続して重複している行をすべて表示する
-i 比較時に大文字と小文字の違いを無視する
-s 先頭N文字を比較対象から除外する
-u 重複していない行のみ表示する

uniqコマンドの完全なマニュアルは、次のコマンドで確認できます。

man uniq

uniqコマンドの使用例

サンプルファイル

以降の例では、次のサンプルファイルを入力として使用します。

movies.txt

Dirty Harry
Dirty Harry
Total Recall
Bride of Frankenstein
Total Recall
Demolition Man

デフォルトの動作 – 連続する重複行の削除

デフォルトでは、uniqコマンドは連続する重複行を削除します。

uniq movies.txt

実行結果:

Dirty Harry
Total Recall
Bride of Frankenstein
Total Recall
Demolition Man

重要なポイントとして、削除されるのは「すべての重複行」ではなく「隣接する同一行」です。連続していない同じ内容の行は削除されません。

繰り返し回数を表示する(-c)

-cオプションを付けると、各行の先頭にその行が繰り返された回数が表示されます。

uniq -c movies.txt

実行結果:

      2 Dirty Harry
      1 Total Recall
      1 Bride of Frankenstein
      1 Total Recall
      1 Demolition Man

重複していない行のみ表示する(-u)

-uオプションを使うと、重複していない行だけが出力されます。

uniq -u movies.txt

実行結果:

Total Recall
Bride of Frankenstein
Total Recall
Demolition Man

重複している行のみ表示する(-d)

-dオプションを使うと、連続して重複している行だけが出力されます。

uniq -d movies.txt

実行結果:

Dirty Harry

ここでもう一度強調しておきます。uniqコマンドが処理対象とするのは「隣接する同一行」のみです。離れた位置にある重複行は含まれないため注意が必要です!

結果をファイルに保存する

コマンドの最後の引数にファイル名を渡すことで、実行結果をそのファイルに保存できます。

uniq -d movies.txt duplicated.txt

標準リダイレクトを使う

前述の通り、uniqコマンドに入出力ファイルを指定することは必須ではありません。

標準リダイレクトを利用すれば、他のコマンドやアプリケーションの出力をuniqに渡すことができ、さらにuniq自身の出力も別のプログラムやファイルへリダイレクトできます。

cat movies.txt | uniq > output.txt

この例では、まずcatコマンドでサンプルファイルを読み込み、その出力がパイプ(|)経由でuniqコマンドに渡されています。その後、uniqの出力は>演算子によってoutput.txtというファイルへリダイレクトされています。

もちろん、単純に入出力ファイルのパスを直接指定する場合と比べて、この方法で特別な機能が追加されるわけではありません。それでも、あるコマンドの出力を別のコマンドへパイプ・リダイレクトして連携させる仕組みを示す、分かりやすい例だと言えます。

  1. Linuxのlsコマンド徹底解説!ファイルとディレクトリを一覧表示する方法

    Linuxのlsコマンドは、多くのユーザーが最初に使うことになる基本コマンドの一つです。この記事では、lsコマンドの基本的な使い方と、実務で頻繁に利用されるオプションについてわかりやすく解説します。 筆者が普段よく使うオプションの組み合わせは以下のとおりです。 ls -Zaltrh それでは、各オプションの意味をひとつずつ掘り下げながら、この組み合わせがなぜ便利なのかを説明していきます。 lsコマンドの基本構文 # ls [OPTION] [FILE] OPTIONS: [-a] 「.」または「..」で始まる隠しエントリを無視しない [-h] -lと併用した場合、サイズを人間が読みやすい形式で

  2. Linuxのwatchコマンドの使い方と実用例をわかりやすく解説

    Linuxのwatchコマンドは、指定したコマンドを一定間隔で繰り返し実行し、その結果を画面に表示し続けるためのツールです。コマンドの出力が時間とともにどう変化するかをリアルタイムで監視したい場合に非常に便利です。この記事では、watchコマンドの基本的な使い方と、覚えておくと役立つ実用的な例を紹介します。 watchコマンドの基本構文 watchコマンドの構文は以下のとおりです。 watch オプション コマンド 各要素の意味は次のとおりです。 オプション: 後述の表から選択したオプションを指定します。watchコマンドのデフォルト動作を変更できます。 コマンド: watchが繰り返し実行