連載
» 2016年11月14日 05時00分 UPDATE

Linux基本コマンドTips(64):【 uniq 】コマンド――重複している行を削除する

本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、「uniq」コマンドです。

[西村めぐみ,@IT]
「Linux基本コマンドTips」のインデックス

Linux基本コマンドTips一覧

 本連載では、Linuxの基本的なコマンドについて、基本的な書式からオプション、具体的な実行例までを分かりやすく紹介していきます。今回は、重複している行を削除する「uniq」コマンドです。

uniqコマンドとは?

 「uniq」は、重複している行を取り除くコマンドです。uniqコマンドは、元のテキストが“並べ替え済み”であることが前提になるので、必要に応じて先に「sort」コマンドで並べ替えを実行しておきます。


uniqコマンドの書式

uniq [オプション] 入力ファイル [出力ファイル]

※[ ]は省略可能な引数を示しています




uniqコマンドの主なオプション

 uniqコマンドの主なオプションは次の通りです。

短いオプション 長いオプション 意味
-c --count 各行の前に出現回数を出力する
-u --unique 重複していない行だけを出力する
-d --repeated 重複した行だけを出力する
-D --all-repeated 重複する行を全て出力する(「--all-repeated=prepend」または「separate」で、区切りに空白行を出力)
-i --ignore-case 比較時に大文字と小文字の違いを無視する
-w N --check-chars=N 行の比較を最初のN文字で行う
-s N --skip-chars=N 最初のN文字を比較しない
-f N --skip-fields=N 最初のN個のフィールドを比較しない
-z --zero-terminated 最後にNULL文字を出力する


重複している行を削除する

 「uniq ファイル」で、ファイルの重複行を取り除きます。

 uniqコマンドは隣り合った行しか比較しないので、先にsortコマンドを使って並べ替えるのが一般的です(第63回参照)。ただし、sortコマンドにも重複行を取り除く「-u」オプションがあるので、並べ替えが必要なファイルであればこちらを使う方が手軽でしょう。

 なお、uniqコマンドでは保存先を指定しない場合は、標準出力に結果が書き出されます。

コマンド実行例

uniq ファイル名

(指定したファイルから重複行を取り除く)(画面1の赤枠部分

sort ファイル名 | uniq

(sortコマンドで並べ替えてから、重複行を取り除く。「sort -u ファイル名」に相当)(画面1の青枠部分


画面1 画面1 uniqコマンドでファイルから重複行を直接削除した(赤枠部分)。sortコマンドで並べ替えてからuniqコマンドを実行することで、離れた場所にある重複行も削除することもできる(青枠部分)


大文字/小文字を区別しないで重複行を削除する

 「-i」(--ignore-case)オプションを使うと、大文字/小文字を区別しないで重複する行を削除することができます。

 uniqコマンドは隣接している行を比較するため、sortコマンドで並べ替える際には「-f」(--ignore-case)オプションで、大文字/小文字を区別しないで並べ替えておく必要があります。なお、長いオプションは「--ignore-case」で同じですが、短いオプションはuniqコマンドとsortコマンドでは異なるので注意してください。

 なお、sortコマンドでは、大文字/小文字を区別しない場合も「-u」オプションを使うことで、重複を取り除くことができます。

コマンド実行例

uniq -i ファイル名

(大文字/小文字を区別しないで重複行を取り除く)(画面2の赤枠部分

sort -f ファイル名 | uniq -i

(大文字/小文字を区別しないで並べ替えてから、重複行を取り除く。「sort -f -u ファイル名」に相当)(画面2の青枠部分


画面2 画面2 大文字/小文字を区別しないで重複行を削除した(赤枠部分)。離れた場所にある行の重複も削除するなら、sortコマンドで大文字/小文字を区別しないで並べ替えてから「uniq -i」を実行する(青枠部分)


重複している行をカウントする

 「-c」オプションで、重複している行をカウントします。大文字/小文字を区別しないでカウントする場合は、「-i」オプションを併用します。

 並べ替えが必要な場合は、sortコマンドと組み合わせて実行します。

コマンド実行例

uniq -c ファイル名

(指定したファイル内の重複行を取り除き、それぞれの行が何回出現したかを表示する)

sort ファイル名 | uniq -c

(重複行を並べ替えてからカウントする)(画面3の赤枠部分

sort -f ファイル名 | uniq -i -c

(大文字/小文字を区別しないで並べ替えてから、重複行をカウントする)(画面3の青枠部分


画面3 画面3 重複行を並べ替えてから出現回数をカウントした(赤枠部分)。さらに、大文字/小文字を区別しないで並べ替えてカウントした(青枠部分)


重複した行だけを出力する

 「-d」オプションで、重複した行だけを出力することができます。「-c」オプションと同様、他のオプションも併用できます。並べ替えが必要な場合は、sortコマンドと組み合わせて実行します。

コマンド実行例

uniq -d ファイル名

(重複している行だけを出力する)

sort ファイル名 | uniq -d

(sortコマンドで並べ替えてから、重複している行だけを出力する)(画面4


画面4 画面4 sortコマンドで並べ替えてから、重複している行を出力した


複数のファイルを対象にして実行するには

 uniqコマンドでは、引数に入力ファイルと出力ファイルを指定できます。例えば、「uniq ファイル1 ファイル2」のように指定すると、「ファイル1」内の重複行を取り除いた結果が「ファイル2」に保存されます。

 複数ファイルの重複行をまとめて取り除きたい場合は、「sort -u ファイル1 ファイル2」のように、sortコマンドを使います。並べ替えの必要がない場合は、「cat」コマンドで連結して「cat ファイル1 ファイル2 | uniq」のように指定するとよいでしょう。



筆者紹介

西村 めぐみ(にしむら めぐみ)

PC-9801N/PC-386MからのDOSユーザー。1992年より生産管理のパッケージソフトウェアの開発およびサポート業務を担当。のち退社し、専業ライターとして活動を開始。著書に『図解でわかるLinux』『らぶらぶLinuxシリーズ』『はじめてでもわかるSQLとデータ設計』『シェルの基本テクニック』など。2011年より、地方自治体の在宅就業支援事業にてPC基礎およびMicrosoft Office関連の教材作成およびeラーニング指導を担当。


Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。