Linux / 명령어 / sort - 텍스트 행 정렬

sort는 입력 파일의 행을 비교해 정렬된 결과를 표준 출력으로 보냅니다. 이름순 정렬뿐 아니라 숫자, 특정 필드, 역순 정렬이 필요할 때 사용합니다.

sort 명령어란?

기본 정렬은 현재 로케일의 문자 비교 규칙을 따릅니다. 원본 파일은 그대로 두고 결과만 출력하므로 결과를 저장하려면 별도 파일로 리디렉션하거나 GNU -o 옵션을 사용합니다. 재현 가능한 정렬 순서가 중요하면 LC_ALL=C를 명시하세요.

기본 문법

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

설치된 구현과 옵션은 배포판에 따라 다를 수 있습니다. man sort으로 현재 시스템의 설명을 확인하세요.

사용 예제

기본 정렬

한 줄을 하나의 레코드로 읽어 정렬합니다. 출력이 파일을 바꾸지는 않습니다.

sort names.txt

숫자 기준 정렬

숫자를 문자로 비교하면 10이 2보다 앞설 수 있으므로 -n을 사용합니다.

sort -n scores.txt

두 번째 필드 기준

공백으로 구분된 데이터에서 두 번째 필드를 숫자로 비교합니다. 필드 구조가 일정한 입력에 적합합니다.

sort -k2,2n results.txt

입력과 정렬 결과를 함께 보기

다음 예제는 파일을 만들지 않고 표준 입력의 세 행을 정렬합니다. 기본 정렬은 현재 로케일의 문자 순서를 따르며 원본 데이터는 바뀌지 않습니다.

printf 'zebra\napple\nbanana\n' | sort

예시 출력:

apple
banana
zebra

숫자가 든 행은 기본적으로 문자열로 비교하므로 2보다 10이 앞설 수 있습니다. 수치 비교가 목적이면 sort -n을 사용하세요. 파일을 정렬해 새 파일로 저장하려면 sort 원본 > 결과처럼 출력 경로를 지정하고, 같은 파일에 바로 리디렉션하지 마세요. 셸이 입력 파일을 먼저 비울 수 있습니다.

여러 열을 기준으로 정렬할 때는 각 키의 범위를 명시하고, 같은 키의 원래 순서를 유지해야 하면 -s를 검토하세요. 로케일이 달라지면 문자 정렬 순서도 달라질 수 있으므로 재현 가능한 스크립트에서는 LC_ALL=C 같은 비교 환경을 명확히 정합니다.

주요 옵션과 형식

옵션·형식 설명
-n 숫자값으로 비교합니다.
-r 결과 순서를 뒤집습니다.
-k 시작,끝 비교할 키 필드를 지정합니다.
-u 정렬하면서 같은 비교 키의 중복 결과를 하나만 남깁니다.
-t 구분자 필드 구분 문자를 지정합니다.

사용할 때 주의할 점

sort -u는 비교 키가 같은 행을 하나로 줄일 수 있으므로 원본의 다른 필드가 중요하면 주의하세요. 텍스트의 원래 등장 순서를 유지하며 인접 중복만 지우려면 uniq가 다릅니다. 입력 파일에 > 같은파일을 사용하면 셸이 먼저 파일을 비울 수 있습니다.

자주 묻는 질문

정렬 결과를 원본 파일에 저장하려면?

GNU sort에서는 sort -o names.txt names.txt를 사용할 수 있습니다. 중요한 파일은 먼저 백업하세요.

공식 문서

옵션의 정확한 동작과 구현별 차이는 sort 관련 공식 문서에서 확인할 수 있습니다.

같은 카테고리의 다른 글
Linux / 명령어 / pacman - Arch Linux에서 패키지 설치와 전체 시스템 업데이트

Linux / 명령어 / pacman - Arch Linux에서 패키지 설치와 전체 시스템 업데이트

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

Linux / 명령어 / top - 프로세스 자원 사용량 실시간 확인

Linux / 명령어 / top - 프로세스 자원 사용량 실시간 확인

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

Linux / 명령어 / env - 환경 변수 설정과 명령 실행

Linux / 명령어 / env - 환경 변수 설정과 명령 실행

Linux env 명령어로 환경 변수를 추가·제거하거나 깨끗한 환경에서 프로그램을 실행하는 방법을 설명합니다. env -i·-u·-C, shebang 활용과 printenv와의 차이를 다룹니다.

Linux / 명령어 / cmp - 두 파일을 바이트 단위로 비교

Linux / 명령어 / cmp - 두 파일을 바이트 단위로 비교

Linux cmp 명령어로 두 파일을 바이트 단위로 비교하는 방법을 설명합니다. 첫 차이 위치, 조용한 검사, 모든 차이 출력과 종료 상태 활용법을 정리합니다.

Linux / 명령어 / traceroute - 목적지까지 라우터 경로 추적

Linux / 명령어 / traceroute - 목적지까지 라우터 경로 추적

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

Linux / 명령어 / readlink - 심볼릭 링크 대상 경로 확인

Linux / 명령어 / readlink - 심볼릭 링크 대상 경로 확인

Linux readlink 명령어로 심볼릭 링크에 저장된 대상 경로를 확인하는 방법을 설명합니다. 상대 링크, 깨진 링크, 경로 정규화 옵션과 realpath의 차이도 정리합니다.

Linux / 명령어 / unzip - ZIP 파일 목록 확인과 안전한 압축 해제

Linux / 명령어 / unzip - ZIP 파일 목록 확인과 안전한 압축 해제

Linux unzip 명령어의 용도와 기본 문법을 알아봅니다. 파일 처리 예제, 주요 옵션과 원본 보존·덮어쓰기 주의점을 설명합니다.

Linux / 명령어 / unalias - 명령어 별칭 삭제

Linux / 명령어 / unalias - 명령어 별칭 삭제

Bash unalias 명령어로 특정 별칭이나 모든 별칭을 제거하는 방법을 설명합니다. 일시 제거와 영구 제거, 별칭 우회 및 함수·변수 삭제와의 차이를 정리합니다.

Linux / 명령어 / killall - 이름이 같은 프로세스에 시그널 보내기

Linux / 명령어 / killall - 이름이 같은 프로세스에 시그널 보내기

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

Linux / 디스크 관리 / 파티션, 포맷, 마운트

Linux / 디스크 관리 / 파티션, 포맷, 마운트

Linux에서 디스크를 관리할 때 필요한 파티션 생성, 파일 시스템 포맷, 마운트 방법을 정리했습니다.