uniq 는 입력 내용에서 중복된 항목을 제거하는 커맨드 라인 유틸리티입니다.

보통 sort 명령어로 정렬을 한 결과를 파이프로 uniq 에 전달해서 중복 내용을 제거합니다.

input.txt

bat
abc
apple
Abc
BALL
ABc
bat
TEXT


기본 사용법

예제 파일을 sort 로 정렬한 결과한 후에 uniq 에 전달하면 중복되는 단어인 bat 는 하나만 표시합니다.

$ sort input.txt | uniq

abc
Abc
ABc
apple
BALL
bat
BASH


유일한 라인만 표시

-u 옵션을 사용하면 중복되지 않는 라인만 표시합니다. 즉 중복된 line 인 bat 는 표시하지 않습니다. 

$ sort input.txt | uniq -u

abc
Abc
ABc
apple
BALL
BASH


중복되는 라인만 표시

-d 옵션을 사용하면 -u 와는 반대로 중복되는 라인만 표시하며 아래 예제는 중복되는 line인 bat 만 표시합니다.

$ sort input.txt | uniq -d

bat
BASH


중복 횟수 세기

-c 옵션을 사용하면 각 라인별 중복 횟수를 계산해서 표시합니다. bat 만 중복되므로 2 가 표시되고 나머지는 다 1이 표시됩니다.

$ sort input.txt | uniq -c

	  1 abc
      1 Abc
      1 ABc
      1 apple
      1 BALL
      2 bat
BASH


-c-d-u 옵션과도 같이 사용할 수 있습니다. 아래는 중복 line 의 횟수만 표시합니다.

$ sort input.txt | uniq -c -d

      2 bat
BASH


uniq -c 의 결과는  출현 빈도에 따라 오름차순으로 표시됩니다. 만약 내림차순으로 변경하려면 uniq 의 결과를 다시 sort 로 받아서 정렬하면 됩니다.

$ sort input.txt | uniq -c | sort -nr

	  2 bat
      1 BALL
      1 apple
      1 ABc
      1 Abc
      1 abc
BASH

대소문자 무시

uniq 는 기본적으로 대소문자를 구분하므로 'abc' 와 'AbC' 를 다르게 인식합니다. 대소문자를 무시하는 옵션인 -i, --ignore-case 를 사용하면 'abc' 와 'ABC', 'aBc' 를 모두 같게 처리합니다.

$ sort input.txt | uniq -i

abc
apple
BALL
bat
BASH


같이 보기