本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、「uniq」コマンドです。
本連載では、Linuxの基本的なコマンドについて、基本的な書式からオプション、具体的な実行例までを分かりやすく紹介していきます。今回は、重複している行を削除する「uniq」コマンドです。
「uniq」は、重複している行を取り除くコマンドです。uniqコマンドは、元のテキストが“並べ替え済み”であることが前提になるので、必要に応じて先に「sort」コマンドで並べ替えを実行しておきます。
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の青枠部分)
「-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の青枠部分)
「-c」オプションで、重複している行をカウントします。大文字/小文字を区別しないでカウントする場合は、「-i」オプションを併用します。
並べ替えが必要な場合は、sortコマンドと組み合わせて実行します。
uniq -c ファイル名
(指定したファイル内の重複行を取り除き、それぞれの行が何回出現したかを表示する)
sort ファイル名 | uniq -c
(重複行を並べ替えてからカウントする)(画面3の赤枠部分)
sort -f ファイル名 | uniq -i -c
(大文字/小文字を区別しないで並べ替えてから、重複行をカウントする)(画面3の青枠部分)
「-d」オプションで、重複した行だけを出力することができます。「-c」オプションと同様、他のオプションも併用できます。並べ替えが必要な場合は、sortコマンドと組み合わせて実行します。
uniq -d ファイル名
(重複している行だけを出力する)
sort ファイル名 | uniq -d
(sortコマンドで並べ替えてから、重複している行だけを出力する)(画面4)
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 © ITmedia, Inc. All Rights Reserved.