2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Linuxでテキストファイルの重複行を抽出・削除する方法(uniqコマンド)

Posted at

Linuxではuniqコマンドとsortコマンドを使用して、テキストファイルの重複行を抽出・削除することができます。
ここではそのやり方を紹介します。

環境

  • OS:CentOS Linux release 8.1.1911
[root@centos8 work]# cat /etc/redhat-release
CentOS Linux release 8.1.1911 (Core)
[root@centos8 work]#

1. uniqコマンド

uniqコマンドの書式は以下の通りです。

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

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

オプション 長いオプション 内容
-c --count 各行の前に重複回数を出力する
-u --unique 重複していない行だけを出力する
-d --repeated 重複した行だけを出力する
-D --all-repeated 重複した行を全て出力する
-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文字を出力する

2. 重複行を抽出

重複行を抽出する場合、以下のコマンドを使用します。
uniq -d <ファイル名>

以下、試してみます。

以下のファイルがあるとします。

sample01.txt
Java
HTML
HTML
JavaScript
JavaScript
Tomcat
Apache

2, 3行目の「HTML」、4, 5行目の「JavaScript」が重複しています。

ここで、以下のコマンドを実行すると、重複行だけ表示されます。

uniq -d sample01.txt

実行結果
[root@centos8 work]# uniq -d sample01.txt
HTML
JavaScript
[root@centos8 work]#

ファイルに出力する場合、以下のコマンドを実行します。

uniq -d sample01.txt <出力ファイル>

実行結果
[root@centos8 work]# uniq -d sample01.txt result01.txt
[root@centos8 work]# cat result01.txt
HTML
JavaScript
[root@centos8 work]#

3. 重複行を削除

重複行を削除する場合、以下のコマンドを使用します。
uniq <ファイル名>

以下、試してみます。

同じく、以下のファイルがあるとします。

sample01.txt
Java
HTML
HTML
JavaScript
JavaScript
Tomcat
Apache

2, 3行目の「HTML」、4, 5行目の「JavaScript」が重複しています。

ここで、以下のコマンドを実行すると、重複行が削除されて表示されます。

uniq sample01.txt

実行結果
[root@centos8 work]# uniq sample01.txt
Java
HTML
JavaScript
Tomcat
Apache
[root@centos8 work]#

ファイルに出力する場合、以下のコマンドを実行します。

uniq sample01.txt <出力ファイル>

実行結果
[root@centos8 work]# uniq sample01.txt result02.txt
[root@centos8 work]# cat result02.txt
Java
HTML
JavaScript
Tomcat
Apache
[root@centos8 work]#

次に以下のファイルがあるとします。

sample02.txt
Java
HTML
HTML
JavaScript
JavaScript
HTML
Tomcat
Apache

2, 3, 6行目の「HTML」、4, 5行目の「JavaScript」が重複しています。

ここで
uniq sample02.txt
を実行すると以下となります。

実行結果
[root@centos8 work]# uniq sample02.txt
Java
HTML
JavaScript
HTML
Tomcat
Apache
[root@centos8 work]#

「HTML」の文字が2回表示されます。
連続している重複(2,3行目の「HTML」)は取り除かれますが、離れている重複行(6行目の「HTML」)は削除されません。
この場合、sortコマンドでソートしてあと、uniqコマンドで重複行を削除します。

sort sample02.txt | uniq

実行結果
[root@centos8 work]# sort sample02.txt | uniq
Apache
HTML
Java
JavaScript
Tomcat
[root@centos8 work]#

順番は変わってしますが、重複行は削除されました。

ファイルに出力する場合、以下のコマンドを実行します。

sort sample02.txt | uniq > <出力ファイル>

実行結果
[root@centos8 work]# sort sample02.txt | uniq > result03.txt
[root@centos8 work]# cat result03.txt
Apache
HTML
Java
JavaScript
Tomcat
[root@centos8 work]#

参考

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?