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

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

1.基本的な使い方

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

[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コマンドを実行しても、重複した行は残ってしまう。

[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」オプションを使用することで、重複行が何行あったのかを左はじに表示してくれる。

[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」オプションを付与する。

[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」を使用すると、重複している行を圧縮せずに表示させることが出来る。

[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」オプションを使用する。

[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」で指定出来る。

[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」オプションを付与することで重複しているかどうか判断する文字数を指定することが出来る。

[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