본문 바로가기
C.W.K.
Stream
Lesson 07 of 10 · published

sort + uniq

~12 min · sort, uniq, frequency

Level 0창 구경꾼
0 XP0/95 lessons0/14 achievements
0/100 XP to next level100 XP to go0% complete

빈도를 묻는 질문의 기본 골격

파일이나 로그에서 어떤 값이 가장 자주 나타나는지 보려면 sort | uniq -c | sort -rn을 기본 골격으로 써. 첫 정렬이 같은 값을 이웃으로 모으고, uniq -c가 개수를 붙이며, 마지막 숫자 역순 정렬이 빈도가 높은 항목을 앞으로 보내. 입력에서 셀 값이나 토큰을 먼저 뽑아야 한다는 점도 잊지 마.

sort에서 자주 쓰는 플래그

  • -n: 문자열 순서가 아니라 숫자 값으로 정렬해.
  • -r: 결과 순서를 뒤집어.
  • -h: 1K, 5M, 2G처럼 단위가 붙은 크기를 값에 맞게 정렬해.
  • -u: 정렬하면서 같은 줄을 하나만 남겨.
  • -k 2: 공백으로 나눈 두 번째 필드를 정렬 기준으로 삼아.
  • -t ',': 필드 구분자를 쉼표로 바꿔.

uniq에서 자주 쓰는 플래그

  • -c: 같은 줄이 이어진 횟수를 앞에 붙여.
  • -d: 두 번 이상 나온 줄만 보여 줘.
  • -u: 한 번만 나온 줄만 보여 줘.

uniq는 전체 입력을 기억하지 않고 바로 앞줄과 비교해. 그래서 전체 중복을 다루려면 입력이 이미 정렬돼 있거나, 앞에서 sort로 같은 줄을 붙여 줘야 해.

빈도 분석 한 줄

awk '{print $1}' access.log | sort | uniq -c | sort -rn | head

로그의 첫 필드인 IP를 뽑고, 같은 IP를 모아 횟수를 센 다음, 많은 순서로 정렬해 상위 10개를 보여 주는 명령이야. 짧은 파이프라인이지만 필드 위치와 로그 형식이 안정적이라는 전제는 먼저 확인해야 해.

uniq는 정렬기가 아니야

uniq는 붙어 있는 같은 줄만 합칠 뿐 순서를 바꾸지 않아. 전체 중복을 제거하려면 보통 먼저 같은 로케일과 같은 키로 정렬해. 원래 순서를 보존해야 한다면 sort -u도 맞지 않을 수 있으니 awk의 집합 처리나 목적에 맞는 자료 구조를 골라.

로케일이 정렬 결과를 바꿔

대소문자, 숫자, 한글의 순서는 로케일에 따라 달라질 수 있어. 두 머신에서 같은 결과가 필요한 빌드나 비교에는 LC_ALL=C처럼 기준을 명시해. 사람이 읽는 목록에는 사용자의 언어 규칙이 더 적합할 수 있으므로, 입력·로케일·정렬 키를 결과와 함께 기록해.

Code

프로젝트의 top 확장자·bash
find . -type f -name '*.*' | awk -F. '{print $NF}' \
  | sort | uniq -c | sort -rn | head
가장 큰 디렉터리·bash
du -sh */ 2>/dev/null | sort -h | tail
# 출력 크기 기준으로도 확인
du -h --max-depth=1 . 2>/dev/null | sort -hr | head

External links

Exercise

history | awk '{print $2}' | sort | uniq -c | sort -rn | head -20을 실행해 자주 사용한 명령을 집계해. 시험 로그나 dmesg 출력에서는 대문자 토큰을 추출해 빈도를 세고, 각 파이프 단계의 중간 출력도 확인해.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.