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 관련 공식 문서에서 확인할 수 있습니다.

같은 카테고리의 다른 글
Linux / 명령어 / tac - 파일을 마지막 줄부터 역순 출력

Linux / 명령어 / tac - 파일을 마지막 줄부터 역순 출력

Linux tac 명령어로 파일의 줄 순서를 뒤집어 마지막 줄부터 출력하는 방법을 설명합니다. 여러 파일 처리, 구분자 변경과 로그 확인 예제를 함께 정리합니다.

Linux / 명령어 / renice - 실행 중인 프로세스 nice 값 변경

Linux / 명령어 / renice - 실행 중인 프로세스 nice 값 변경

Linux renice 명령어의 기본 문법과 실제 사용 예제를 설명합니다. 주요 옵션과 결과를 해석할 때 주의할 점을 확인할 수 있습니다.

Linux / 명령어 / resolvectl - systemd DNS 설정과 이름 조회 상태 확인

Linux / 명령어 / resolvectl - systemd DNS 설정과 이름 조회 상태 확인

Linux resolvectl 명령어의 기능과 기본 문법을 설명합니다. 실제 사용 예제, 주요 옵션과 작업 전 확인할 점을 알아봅니다.

Linux / 명령어 / zypper - openSUSE·SUSE에서 패키지와 저장소 관리

Linux / 명령어 / zypper - openSUSE·SUSE에서 패키지와 저장소 관리

Linux zypper 명령어의 적용 배포판과 기본 작업을 설명합니다. 패키지 조회·설치 예제, 주요 옵션과 시스템 변경 시 주의점을 알아봅니다.

Linux / 명령어 / chgrp - 파일 소유 그룹 변경

Linux / 명령어 / chgrp - 파일 소유 그룹 변경

Linux chgrp 명령어의 기본 문법과 실제 사용 예제를 설명합니다. 주요 옵션과 결과를 해석할 때 주의할 점을 확인할 수 있습니다.

Linux / 명령어 / dig - DNS 레코드와 응답 자세히 조회

Linux / 명령어 / dig - DNS 레코드와 응답 자세히 조회

Linux dig 명령어의 기능과 기본 문법을 설명합니다. 실제 사용 예제, 주요 옵션과 작업 전 확인할 점을 알아봅니다.

Linux / 리눅스 Bash 명령어 연결 연산자: ;, &&, ||, &, | 사용법

Linux / 리눅스 Bash 명령어 연결 연산자: ;, &&, ||, &, | 사용법

리눅스 Bash의 ;, &&, ||, &, |, |&, ! 차이를 종료 상태와 실제 예제로 설명합니다. 조건부 실행, 백그라운드 작업, 파이프라인과 pipefail 사용법까지 정리합니다.

Linux / 명령어 / timedatectl - 시간대와 시간 동기화 상태 관리

Linux / 명령어 / timedatectl - 시간대와 시간 동기화 상태 관리

Linux timedatectl 명령어의 기능과 기본 문법을 설명합니다. 실제 사용 예제, 주요 옵션과 작업 전 확인할 점을 알아봅니다.

Linux / 명령어 / command - 명령어 검색과 별칭 우회 실행

Linux / 명령어 / command - 명령어 검색과 별칭 우회 실행

셸 command 명령어로 함수 검색을 건너뛰어 원래 명령을 실행하고, command -v로 명령 존재 여부를 확인하는 방법을 설명합니다. -p·-V 옵션과 builtin·exec·env의 차이도 정리합니다.

Linux / 명령어 / parted - 파티션 표와 빈 공간 확인·관리

Linux / 명령어 / parted - 파티션 표와 빈 공간 확인·관리

Linux parted 명령어의 기능과 기본 문법을 설명합니다. 실제 사용 예제, 주요 옵션과 작업 전 확인할 점을 알아봅니다.