서버 로그를 분석하거나 대용량 텍스트 데이터를 처리하다 보면, 똑같은 내용이 수없이 반복되어 파일 크기를 키우고 가독성을 해치는 경우를 자주 마주하게 됩니다. "이 수많은 중복 IP 중 공격자는 누구일까?" 혹은 "중복된 이메일 주소를 어떻게 한 번에 정리하지?"라는 고민, 시스템 관리자나 개발자라면 누구나 한 번쯤 해보셨을 겁니다.
오늘 소개할 리눅스 uniq 명령어는 이러한 중복 데이터의 늪에서 여러분을 구해줄 강력한 필터 도구입니다. 단순히 중복을 지우는 것을 넘어, 데이터의 빈도수를 파악하고 유의미한 통계를 뽑아내는 핵심 기술을 15년 차 엔지니어의 관점에서 알기 쉽게 정리해 드립니다.
1. 리눅스 uniq 명령어의 핵심 원리와 주의사항
uniq(unique) 명령어는 텍스트 파일 내에서 인접한 중복 라인을 필터링하여 하나로 만들어주거나 제거하는 역할을 합니다. 여기서 가장 중요한 키워드는 바로 '인접한(Adjacent)'입니다.
⚠️ 봉봉테크의 실무 Tip:
uniq 명령어는 떨어져 있는 중복 라인은 감지하지 못합니다. 따라서 반드시 sort 명령어로 데이터를 정렬한 후 파이프(|)를 통해 uniq로 넘겨야 완벽하게 작동합니다.
예를 들어, sort access.log | uniq와 같이 사용하는 것이 정석입니다. 이 패턴만 기억해도 텍스트 처리 효율이 200% 상승합니다.
2. 실무에서 가장 많이 쓰는 uniq 옵션 베스트 3
① 중복 횟수 카운트: -c (Count)
데이터 분석에서 가장 유용한 옵션입니다. 각 라인이 몇 번 중복되었는지 숫자와 함께 출력합니다. 웹 서버 로그에서 가장 많이 접속한 IP를 찾거나, 발생 빈도가 높은 에러 메시지를 추출할 때 필수적입니다.
$ sort colors.txt | uniq -c 3 Blue 2 Green 1 Red
② 중복된 라인만 출력: -d (Duplicate)
유일한 값은 제외하고, 중복이 발생한 데이터만 보고 싶을 때 사용합니다. 데이터 무결성을 검사하거나, 중복 회원 가입자를 찾아낼 때 유용하게 활용됩니다.
③ 유일한 라인만 출력: -u (Unique)
반대로 단 한 번만 등장한 데이터를 추출합니다. 중복되지 않은 고유한 값을 찾아야 하는 희소 데이터 분석에 적합합니다.
3. uniq 명령어 옵션 한눈에 비교하기
복잡한 옵션들을 실무 활용 목적에 따라 정리했습니다. 아래 표를 참고하여 상황에 맞는 옵션을 선택해 보세요.
| 옵션 | 기능 설명 | 추천 활용 사례 |
|---|---|---|
| -c | 중복 횟수를 라인 앞에 표시 | 로그 분석 (접속 빈도, 에러 카운트) |
| -d | 중복된 라인만 출력 (하나씩) | 중복 데이터 검출 및 디버깅 |
| -u | 중복되지 않은 유일한 라인만 출력 | 희소성 있는 고유 데이터 추출 |
| -i | 대소문자 구분 없이 처리 | 사용자 입력 데이터 정규화 |
| -w N | 앞에서부터 N번째 문자까지만 비교 | 타임스탬프 제외 후 내용 비교 |
💡 봉봉테크의 요약 및 제언
리눅스 uniq 명령어는 단순해 보이지만, 텍스트 처리 파이프라인의 핵심입니다. 기억해야 할 것은 단 하나, "정렬(sort) 후에 중복 제거(uniq)를 한다"는 원칙입니다.
지금 바로 터미널을 열고 여러분의 서버 로그 파일에 sort | uniq -c | sort -nr 명령어를 입력해 보세요. 가장 많이 발생한 로그가 무엇인지 순위별로 즉시 확인할 수 있을 것입니다. 작은 명령어가 가져다주는 데이터 인사이트를 경험해 보시길 바랍니다.
| 옵션 | 기능 설명 | 추천 활용 사례 |
|---|---|---|
| -c | 중복 횟수를 라인 앞에 표시 | 로그 분석 (접속 빈도, 에러 카운트) |
| -d | 중복된 라인만 출력 (하나씩) | 중복 데이터 검출 및 디버깅 |
| -u | 중복되지 않은 유일한 라인만 출력 | 희소성 있는 고유 데이터 추출 |
| -i | 대소문자 구분 없이 처리 | 사용자 입력 데이터 정규화 |
| -w N | 앞에서부터 N번째 문자까지만 비교 | 타임스탬프 제외 후 내용 비교 |