Linux / 명령어 / uniq - 인접한 중복 행 정리
uniq는 바로 이웃한 같은 행을 하나로 줄이거나 반복 횟수를 표시합니다. 전체 파일의 중복값을 제거하려면 보통 먼저 정렬해야 합니다.
uniq 명령어란?
서로 떨어진 동일 행은 uniq만으로 제거되지 않습니다. 입력 순서를 유지해야 한다면 무조건 정렬하지 말고 필요한 중복의 의미를 먼저 정하세요. 정렬 후 uniq를 쓰면 원래 행 순서는 바뀝니다.
기본 문법
uniq [옵션] [입력파일 [출력파일]]
설치된 구현과 옵션은 배포판에 따라 다를 수 있습니다. man uniq으로 현재 시스템의 설명을 확인하세요.
사용 예제
인접 중복 제거
같은 행이 연속될 때 첫 행만 출력합니다.
uniq events.txt
전체 중복값 세기
정렬로 같은 값을 모은 뒤 -c로 반복 횟수를 표시합니다.
sort names.txt | uniq -c
중복된 값만 확인
두 번 이상 연속된 값의 종류를 출력합니다.
sort names.txt | uniq -d
인접한 중복과 전체 중복 구별하기
uniq는 연속된 동일 행만 묶습니다. 아래에서는 마지막 apple이 앞의 두 행과 떨어져 있으므로 별도로 남습니다.
printf 'apple\napple\nbanana\napple\n' | uniq -c
예시 출력(숫자 앞 공백은 구현에 따라 다를 수 있음):
2 apple 1 banana 1 apple
파일 전체의 동일 행을 하나로 묶으려면 정렬 후 sort 파일 | uniq을 사용합니다. 다만 정렬은 원래 행 순서를 바꾸므로, 입력 순서가 중요한 로그나 이벤트 기록에는 무조건 적용하지 마세요. -d는 중복된 그룹만, -u는 한 번만 나타난 그룹만 표시합니다.
주요 옵션과 형식
| 옵션·형식 | 설명 |
|---|---|
-c |
각 출력 행 앞에 연속 발생 횟수를 붙입니다. |
-d |
중복된 행만 출력합니다. |
-u |
한 번만 나타난 행만 출력합니다. |
-i |
비교할 때 대소문자를 무시합니다. |
-f N |
앞쪽 N개 필드를 비교에서 제외합니다. |
사용할 때 주의할 점
sort | uniq에서는 로케일에 따라 정렬·비교 결과가 달라질 수 있습니다. 정확한 바이트 기준 집계가 필요하면 두 명령에 같은 LC_ALL=C 환경을 적용하세요. uniq -u는 모든 고유값이 아니라 단 한 번만 나온 행을 뜻합니다.
자주 묻는 질문
uniq가 떨어진 중복 행을 지우지 않는 이유는?
현재 행을 바로 앞 행과 비교하는 방식이기 때문입니다. 전체 중복 제거에는 입력을 정렬해 같은 행을 모으세요.
공식 문서
옵션의 정확한 동작과 구현별 차이는 uniq 관련 공식 문서에서 확인할 수 있습니다.









