빈도를 묻는 질문의 기본 골격
파일이나 로그에서 어떤 값이 가장 자주 나타나는지 보려면 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처럼 기준을 명시해. 사람이 읽는 목록에는 사용자의 언어 규칙이 더 적합할 수 있으므로, 입력·로케일·정렬 키를 결과와 함께 기록해.