Computer >> 컴퓨터 >  >> 프로그래밍 >> Bash 프로그래밍

Linux uniq 명령어 완벽 가이드 – 기본 사용법과 실전 예제

이 글에서는 Linux의 uniq 명령어를 사용해 파일에서 반복되는 줄을 찾거나 필터링하는 방법을 설명하고, 다양한 실전 예제를 함께 소개합니다.

uniq 명령어는 입력으로 받은 내용이나 파일에서 반복되는 줄을 출력하거나 생략하는 아주 간단한 명령어입니다.

uniq 명령어 문법

uniq 명령어의 기본 문법은 다음과 같습니다:

uniq OPTIONS INPUT OUTPUT

각 항목에 대한 설명은 다음과 같습니다:

  • OPTIONS: 아래 표에 정리된 옵션 목록
  • INPUT: 읽어 들일 파일의 경로
    • *표준 입력*도 사용할 수 있습니다
  • OUTPUT: uniq 명령어의 실행 결과를 저장할 파일
    • 지정하지 않으면 표준 출력이 사용됩니다(기본적으로 결과가 콘솔에 출력됨)

입력 또는 출력 파일을 지정하지 않은 경우, STDIN과 STDOUT을 통해 uniq 명령어의 입출력을 리다이렉트할 수 있습니다. 자세한 방법은 관련 문서를 참고하세요.

주요 옵션

아래 표는 매뉴얼에 나오는 자주 사용되는 옵션들을 정리한 것입니다:

옵션 설명
-c 각 줄 앞에 반복 횟수를 붙여 출력
-d 반복되는 줄만 출력(그룹당 하나씩)
-D 반복되는 모든 줄 출력
-i 비교 시 대소문자 차이 무시
-s 처음 N개 문자를 비교에서 제외
-u 반복되지 않는 고유한 줄만 출력

uniq 명령어의 전체 매뉴얼은 아래 명령어로 확인할 수 있습니다:

man uniq

uniq 명령어 사용 예제

예제 파일

아래 예제들은 다음 예제 파일을 입력으로 사용합니다:

movies.txt

Dirty Harry
Dirty Harry
Total Recall
Bride of Frankenstein
Total Recall
Demolition Man

기본 동작 – 반복되는 줄 제거

기본적으로 uniq 명령어는 반복되는 줄을 제거합니다.

uniq movies.txt

실행 결과:

Dirty Harry
Total Recall
Bride of Frankenstein
Total Recall
Demolition Man

주의할 점은 '중복'이 아니라 '반복'이 제거된다는 것입니다. 즉, 인접한 동일한 줄만 제거됩니다.

반복 횟수 표시하기

-c 옵션을 사용하면 각 줄 앞에 해당 줄이 반복된 횟수가 함께 출력됩니다:

uniq -c movies.txt

실행 결과:

   2 Dirty Harry
   1 Total Recall
   1 Bride of Frankenstein
   1 Total Recall
   1 Demolition Man

반복되지 않는 줄만 표시하기

-u 옵션은 반복되지 않는 줄만 출력합니다:

uniq -u movies.txt

실행 결과:

Total Recall
Bride of Frankenstein
Total Recall
Demolition Man

반복되는 줄만 표시하기

-d 옵션은 반복되는 줄만 출력합니다:

uniq -d movies.txt

실행 결과:

Dirty Harry

다시 한번 강조하지만, 포함되거나 제외되는 것은 '중복된' 줄이 아니라 '반복되는' 줄입니다. uniq 명령어는 인접한 동일한 줄만 처리한다는 점을 꼭 기억하세요!

결과 저장하기

명령어의 마지막 인자로 파일 이름을 전달하면 결과를 해당 파일에 저장할 수 있습니다:

uniq -d movies.txt duplicated.txt

표준 리다이렉션 활용하기

앞서 언급했듯이, uniq 명령어에 입력 및 출력 파일을 반드시 지정할 필요는 없습니다.

표준 리다이렉션을 사용하면 다른 명령어와 프로그램의 출력을 uniq로 전달하고, uniq의 출력 역시 다른 프로그램이나 파일로 리다이렉트할 수 있습니다.

cat movies.txt | uniq > output.txt

위 예제에서는 cat 명령어로 예제 파일을 읽고, 그 출력이 파이프를 통해 uniq 명령어로 전달됩니다. 이후 uniq 명령어의 출력은 > 연산자를 사용해 파일로 리다이렉트됩니다.

물론 이 방식은 단순히 입출력 파일 경로를 지정하는 것과 비교해 특별한 추가 기능을 제공하지는 않습니다. 그럼에도 불구하고 명령어의 출력을 다른 명령어로 파이핑하거나 리다이렉트하는 방법을 보여주는 좋은 예시입니다.