このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。
Linuxコマンドの基本:重複行を取り除く:uniqコマンド
重複行を取り除く:uniqコマンド
Linuxでテキストデータを扱う際、データ内の重複した行を取り除くことは、データの整理や解析において重要な作業です。uniq
コマンドは、テキストファイル内の連続した同じ内容の行を省くためのコマンドで、IDリストやログファイルなどから重複行を取り除く際によく利用されます。
uniqコマンドの概要
uniq
コマンドは、入力されたテキストデータの中で連続している重複行を検出し、それらを一つにまとめます。ただし、重複行が連続していない場合は、そのまま残ります。そのため、ファイル全体から重複行を完全に取り除きたい場合は、事前にsort
コマンドでデータを並べ替える必要があります。
基本的な使い方
【書式】uniq [オプション] [入力ファイル] [出力ファイル]
- 入力ファイル:重複行を取り除きたいテキストファイルを指定します。
- 出力ファイル:結果を保存するファイルを指定します。指定しない場合は標準出力に表示されます。
実例:重複行を含むファイルの処理
ファイルの準備
以下の内容の file1
というファイルをnanoエディタなどのテキストエディタで作成します。
user01@ubuntu-vm:~$ nano file1
file1
の内容
Apple
Banana
Banana
Orange
Grape
Pineapple
Pineapple
Pineapple
Strawberry
uniqコマンドの適用
uniq
コマンドを使って、重複行を取り除きます。
user01@ubuntu-vm:~$ uniq file1
Apple
Banana
Orange
Grape
Pineapple
Strawberry
結果
連続して重複していた “Banana” と “Pineapple” がそれぞれ一行にまとめられました。
注意点:連続していない重複行
uniq
コマンドは、連続した重複行のみを処理します。重複行が離れている場合、取り除かれません。
例:重複行が連続していない場合
file2
というファイルを作成します。
user01@ubuntu-vm:~$ nano file2
file2
の内容
Apple
Banana
Orange
Grape
Pineapple
Banana
Pineapple
Pineapple
Strawberry
uniqコマンドの適用
user01@ubuntu-vm:~$ uniq file2
Apple
Banana
Orange
Grape
Pineapple
Banana
Pineapple
Strawberry
結果
離れた位置にある “Banana” や “Pineapple” の重複行は取り除かれていません。
sortコマンドとの併用
ファイル全体から重複行を取り除くには、事前にsort
コマンドでデータを並べ替えます。
user01@ubuntu-vm:~$ sort file2 | uniq
Apple
Banana
Grape
Orange
Pineapple
Strawberry
解説
sort file2
:データをアルファベット順に並べ替えます。| uniq
:連続した重複行を取り除きます。
結果
ファイル全体から重複行が取り除かれました。
sortコマンドの-u
オプション
sort
コマンドの-u
オプションを使用すると、重複行を取り除いた上でソートが可能です。
user01@ubuntu-vm:~$ sort -u file2
Apple
Banana
Grape
Orange
Pineapple
Strawberry
解説
sort -u
はソートと同時に重複行を削除します。
uniqコマンドの主なオプション
重複行の数を数える:-c
オプション
uniq -c
を使用すると、連続した重複行の出現回数を表示できます。
例:file1
の重複行数を表示
user01@ubuntu-vm:~$ sort file1 | uniq -c
1 Apple
2 Banana
1 Grape
1 Orange
3 Pineapple
1 Strawberry
解説
sort file1
:データを並べ替え、重複行を連続させます。uniq -c
:各行の出現回数を表示します。
出現回数でソートする
出現回数の多い順や少ない順に並べ替えるには、sort
コマンドと組み合わせます。
多い順に表示
user01@ubuntu-vm:~$ sort file1 | uniq -c | sort -rn
3 Pineapple
2 Banana
1 Strawberry
1 Orange
1 Grape
1 Apple
解説
sort -rn
:数値を降順(大きい順)にソートします。
少ない順に表示
user01@ubuntu-vm:~$ sort file1 | uniq -c | sort -n
1 Apple
1 Grape
1 Orange
1 Strawberry
2 Banana
3 Pineapple
解説
sort -n
:数値を昇順(小さい順)にソートします。
その他のオプション
-d
:重複している行のみを表示します。-u
:一度だけ出現する行のみを表示します。
例:重複行のみ表示
user01@ubuntu-vm:~$ sort file1 | uniq -d
Banana
Pineapple
例:一度だけ出現する行を表示
user01@ubuntu-vm:~$ sort file1 | uniq -u
Apple
Grape
Orange
Strawberry
不要なファイルの削除
作成したファイルを削除します。
user01@ubuntu-vm:~$ rm file1 file2
まとめ
uniq
コマンドは、連続した重複行を取り除くためのコマンドです。- 注意点:重複行が連続していない場合、
uniq
コマンドだけでは取り除けません。その場合は、sort
コマンドでデータを並べ替えてからuniq
を使用します。 - 主なオプション
・-c
:重複行の出現回数を表示する。
・-d
:重複している行のみを表示する。
・-u
:一度だけ出現する行のみを表示する。 - 応用:
sort
コマンドと組み合わせることで、データの出現回数のランキングを作成するなど、データ解析に活用できます。
このように、uniq
コマンドを活用することで、テキストデータの重複行を効率的に処理できます。データの整理や分析の際に、ぜひ活用してみてください。