アルパカログ

Webエンジニア兼マネージャーがプログラミングやマネジメント、読んだ本のまとめを中心に書いてます。

shell 重複を除外する・重複を見つける(uniq)

f:id:otoyo0122:20200919140657p:plain:w300

bashやzshなどのシェルで行の重複を除外したり、重複を見つけるにはuniqコマンド(unique)を使います。

uniqコマンドでは、事前に必ずソートしておく必要があります。

$ cat ids.txt
1
2
3
2
3
4

# 重複の除外
$ cat ids.txt | sort | uniq
1
2
3
4

# sort -u でもOK
$ cat ids.txt | sort -u
1
2
3
4

重複を検出するにはuniq -dを使います。

# 重複の検出
$ cat ids.txt | sort | uniq -d
2
3

ちなみにsortコマンドはデフォルトでは文字としてソートしますが、オプション-nを渡すことによって数値としてソートします。

$ cat ids.txt
1
11
10
101
100

# 文字としてソート
$ cat ids.txt | sort
1
10
100
101
11

# 数値としてソート
$ cat ids.txt | sort -n
1
10
11
100
101