sort 명령어 사용법

텍스트 줄을 정렬해 표준 출력으로 내보내는 명령어입니다.

텍스트 처리연결 실습 문제 12개Rocky Linux 8 기준 · 실행 결과는 실습 컨테이너에서 확인

기본 문법

sort [옵션] [파일...]

sort는 입력의 각 줄을 기준에 따라 순서대로 재배열해 표준 출력으로 내보내는 명령어입니다. 기본값은 로캘 기준 사전순 오름차순이며, 옵션으로 숫자순, 역순, 특정 필드 기준, 사람이 읽기 쉬운 크기 단위(K, M, G) 기준 정렬 등을 지정할 수 있습니다. 원본 파일은 변경하지 않고 결과만 출력하므로, 저장하려면 리디렉션이나 -o 옵션을 써야 합니다.

로그·목록·CSV 같은 텍스트 데이터를 다룰 때 자주 쓰입니다. uniq는 인접한 줄만 중복으로 인식하므로, 중복을 제거하려면 sort로 먼저 정렬한 뒤 uniq를 적용하거나 sort -u를 사용합니다. du 결과를 크기순으로 보거나, grep·cut·awk로 추출한 값을 정리할 때도 파이프의 마지막 단계에 놓이는 경우가 많습니다.

리눅스마스터·LPIC 등 시험에서는 -n, -r, -u, -k, -t 옵션의 의미와 sort | uniq 조합이 자주 출제됩니다. 러닉스 실습에서도 사용자 목록 정렬, 오류 경로 추출, 포트 번호 오름차순 정렬처럼 다른 명령과 연결해 쓰는 형태로 다룹니다.

자주 쓰는 옵션

옵션의미
-n줄 앞부분의 숫자 값을 수의 크기로 비교해 정렬sort -n ports.txt
-r비교 결과를 뒤집어 역순(내림차순)으로 출력sort -nr sizes.txt
-u정렬 키가 같은 줄은 하나만 남김sort -u users.txt
-k정렬 기준이 되는 필드(열) 범위 지정. 예: -k2,2는 2번째 필드만 기준으로 사용sort -k2,2n data.txt
-t필드 구분 문자 지정. 지정하지 않으면 공백이 아닌 문자 앞의 빈 칸 경계를 구분점으로 사용sort -t: -k3,3n /etc/passwd
-o결과를 지정한 파일에 저장. 입력 파일과 같은 이름을 지정해도 내용이 보존됨sort -o users.txt users.txt
-f비교할 때 소문자를 대문자로 취급해 대소문자를 구분하지 않음sort -f names.txt
-h1K, 2M 같은 사람이 읽는 크기 단위를 해석해 크기순으로 정렬du -h | sort -h
-b비교 시 필드 앞쪽의 공백을 무시sort -b list.txt
-c정렬 여부만 검사하고 출력하지 않음. 정렬되어 있지 않으면 첫 위반 줄을 알리고 종료 코드 1을 반환sort -c users.txt

실무 예시

기본 사전순 정렬

준비: mkdir -p /tmp/demo; printf 'banana\napple\ncherry\napple\n' > /tmp/demo/fruits.txt

$ sort /tmp/demo/fruits.txt
apple
apple
banana
cherry

옵션 없이 실행하면 로캘 기준 사전순 오름차순으로 정렬되며, 중복된 줄은 그대로 남습니다.

정렬 후 중복 제거

준비: mkdir -p /tmp/demo; printf 'student\nroot\nbackup\nroot\nstudent\n' > /tmp/demo/users.txt

$ sort -u /tmp/demo/users.txt > /tmp/demo/users_clean.txt; cat /tmp/demo/users_clean.txt
backup
root
student

-u는 정렬과 중복 제거를 한 번에 처리합니다. 이 예시처럼 줄 전체를 기준으로 비교할 때는 sort file | uniq 와 결과가 같습니다.

숫자순 정렬과 역순

준비: mkdir -p /tmp/demo; printf '100\n9\n25\n3\n' > /tmp/demo/nums.txt

$ sort -n /tmp/demo/nums.txt; echo '---'; sort -nr /tmp/demo/nums.txt
3
9
25
100
---
100
25
9
3

-n을 빼면 사전순으로 비교해 100이 9보다 앞에 옵니다. -r을 더하면 내림차순이 됩니다.

구분자와 필드 기준 정렬

준비: mkdir -p /tmp/demo; printf 'http,tcp,80\nssh,tcp,22\ndns,udp,53\nhttps,tcp,443\n' > /tmp/demo/services.csv

$ grep ',tcp,' /tmp/demo/services.csv | sort -t, -k3,3n | cut -d, -f1,3 | tr ',' ':'
ssh:22
http:80
https:443

쉼표를 구분자로 삼아 3번째 필드(포트)를 숫자순으로 정렬한 뒤 name:port 형식으로 바꿉니다.

로그에서 값 추출 후 정렬

준비: mkdir -p /tmp/demo; printf 'GET /a 200\nGET /err 500\nGET /b 404\nGET /err 503\nGET /db 500\n' > /tmp/demo/http.log

$ awk '$3 >= 500 {print $2}' /tmp/demo/http.log | sort -u > /tmp/demo/error_paths.txt; cat /tmp/demo/error_paths.txt
/db
/err

상태 코드가 500 이상인 줄의 경로만 뽑아 중복 없이 정렬해 저장합니다. 러닉스 실습 #165와 같은 흐름입니다.

주의할 점

  • sort는 원본 파일을 바꾸지 않습니다. 저장하려면 리디렉션하거나 -o 옵션을 쓰세요.
  • 같은 파일에 `sort f > f` 로 리디렉션하면 셸이 먼저 파일을 비우므로 내용이 사라집니다. `sort -o f f` 를 쓰세요.
  • uniq는 인접한 중복만 제거하므로 sort로 먼저 정렬한 뒤 연결해야 합니다.
  • -n 없이 숫자를 정렬하면 사전순 비교라 100이 9보다 앞에 옵니다. K·M·G 같은 크기 단위가 붙은 값은 -h를 쓰세요.
  • 정렬 순서는 로캘(LC_ALL, LC_COLLATE)에 영향을 받습니다. 스크립트에서 환경과 무관한 일정한 순서가 필요하면 LC_ALL=C sort 처럼 로캘을 고정하세요.
  • /etc/passwd 같은 시스템 파일을 정렬해 볼 때는 출력만 확인하고, -o 로 원본을 덮어쓰지 마세요.

이 명령어로 풀 수 있는 실습 문제

브라우저 웹 터미널에서 바로 풀고 요구사항별로 자동 채점됩니다. 로그인 없이 5분 체험도 가능합니다.

관련 명령어

마지막 검수 2026-09-16 · 내용에 오류가 있으면 문제 페이지의 질문 기능으로 알려 주세요.