uniqコマンドで覚えておきたい使い方6個

uniqコマンドは、Linux/UNIXで使用される、重複した行を圧縮して出力してくれるコマンドだ。
今回は、このコマンドについて覚えておきたい使い方についてを紹介する。

1.基本的な使い方

基本的には、以下のように使用することで標準出力の内容から重複行を圧縮して表示させることが出来る。

shell
[root@test-centos7 ~]# cat /test/test3.txt aaaaa aaaaa aaaaa bbbbb bbbbb bbbbb bbbbb bbbbb ccccc ccccc [root@test-centos7 ~]# cat /test/test3.txt | uniq aaaaa bbbbb ccccc

この時注意したいのが、「連続していない行」の場合は圧縮しないという点だ。 たとえば、以下のような状態でuniqコマンドを実行しても、重複した行は残ってしまう。

shell
[root@test-centos7 ~]# cat /test/test4.txt aaaaa aaaaa bbbbb bbbbb aaaaa bbbbb bbbbb ccccc ccccc bbbbb [root@test-centos7 ~]# cat /test/test4.txt | uniq aaaaa bbbbb aaaaa bbbbb ccccc bbbbb

2.重複している行の数をカウントする

「-c」オプションを使用することで、重複行が何行あったのかを左はじに表示してくれる。

shell
[root@test-centos7 ~]# cat /test/test3.txt aaaaa aaaaa aaaaa bbbbb bbbbb bbbbb bbbbb bbbbb ccccc ccccc [root@test-centos7 ~]# cat /test/test3.txt | uniq -c 3 aaaaa 5 bbbbb 2 ccccc 1

3.重複した行・重複していない行だけを表示させる

重複した行、重複していない行だけを表示させることも出来る。
重複している行のみを出力させる場合は「-d」を、重複のない(ユニークな)行をのみを出力させる場合は「-u」オプションを付与する。

shell
[root@test-centos7 ~]# cat /test/test3.txt aaaaa aaaaa aaaaa aaaa1 bbbbb bbbbb bbbbb bbbbb bbbbb bbbb2 ccccc ccccc [root@test-centos7 ~]# cat /test/test3.txt | uniq -d aaaaa bbbbb ccccc [root@test-centos7 ~]# cat /test/test3.txt | uniq -u aaaa1 bbbb2

なお、「-d」ではなく「-D」を使用すると、重複している行を圧縮せずに表示させることが出来る。

shell
[root@test-centos7 ~]# cat /test/test3.txt aaaaa aaaaa aaaaa aaaa1 bbbbb bbbbb bbbbb bbbbb bbbbb bbbb2 ccccc ccccc [root@test-centos7 ~]# cat /test/test3.txt | uniq -D aaaaa aaaaa aaaaa bbbbb bbbbb bbbbb bbbbb bbbbb ccccc ccccc

4.大文字・小文字を区別せずに判断する

大文字・小文字を区別せずに重複行か否かを判断させる場合は、「-i」オプションを使用する。

shell
[root@test-centos7 ~]# cat /test/test4.txt aaaaa AAAAA aaaaa bbbbb bbbbb BBBBB bbbbb ccccc CCCCC ccccc [root@test-centos7 ~]# cat /test/test4.txt | uniq aaaaa AAAAA aaaaa bbbbb BBBBB bbbbb ccccc CCCCC ccccc [root@test-centos7 ~]# cat /test/test4.txt | uniq -i aaaaa bbbbb ccccc

5.指定した項目数、文字数をスキップして重複しているかどうかを判断する

各行で指定した項目数、文字数をスキップして、その範囲内で重複しているかどうかを判断させることも出来る。
スキップする項目数は「-f」、文字数は「-s」で指定出来る。

shell
[root@test-centos7 ~]# cat /test/test5.txt aaaaa bbbbb aabbb bbbbb ccbbb ccccc ddbbb ccccc bbbbb ccccc eeeeb ddddd [root@test-centos7 ~]# [root@test-centos7 ~]# # 項目をスキップする [root@test-centos7 ~]# cat /test/test5.txt | uniq -f 1 aaaaa bbbbb ccbbb ccccc eeeeb ddddd [root@test-centos7 ~]# [root@test-centos7 ~]# # 文字をスキップする [root@test-centos7 ~]# cat /test/test5.txt | uniq -s 6 aaaaa bbbbb ccbbb ccccc eeeeb ddddd [root@test-centos7 ~]# [root@test-centos7 ~]# # 頭から2文字スキップし、3文字で重複を確認する [root@test-centos7 ~]# cat /test/test5.txt | uniq -s 2 -w 3 aaaaa bbbbb aabbb bbbbb eeeeb ddddd

6.重複しているかどうか判断する文字数を指定する

先の項目でも少し触れているが、「-w」オプションを付与することで重複しているかどうか判断する文字数を指定することが出来る。

shell
[root@test-centos7 ~]# cat /test/test5.txt aaaaa bbbbb aabbb bbbbb ccbbb ccccc ddbbb ccccc bbbbb ccccc eeeeb ddddd [root@test-centos7 ~]# [root@test-centos7 ~]# cat /test/test5.txt | uniq -w 2 aaaaa bbbbb ccbbb ccccc ddbbb ccccc bbbbb ccccc eeeeb ddddd