sort 는 이름 그대로 입력된 내용을 정렬하는 명령어입니다.

기본 정렬 방식은 내림차순(ascending) 이며 -r 옵션으로 오름차순(descending) 방식으로 정렬할 수 있습니다.


다음과 같이 input.txt 이 있을 경우 옵션에 따라서 다양한 정렬 결과를 출력합니다.

input.txt

bat
abc
 apple
 Abc
BALL
ABc
bat
TEXT


정렬

sort 를 옵션없이 실행하면 오름차순으로 정렬합니다.

$  sort input.txt 

abc
 Abc
ABc
 apple
BALL
bat
bat
BASH


-r 옵션을 사용하면 내림차순으로 정렬할 수 있습니다.

$  sort -r input.txt 

bat
bat
BALL
 apple
ABc
 Abc
abc
BASH


대소문자 구분 안하기

-f, --ignore-case 옵션을 사용하면 대소문자 구분을 안 하게 됩니다

$  sort input.txt -f

Abc
 apple
ABc
abc
BALL
bat
bat
BASH


공백 무시

sort 는 라인 시작에 공백이 있을 경우 공백 문자도 포함해서 정렬합니다. -b, --ignore-leading-blanks  옵션을 사용하면 공백을 무시하게 됩니다.

$  sort input.txt -f -b

 Abc
ABc
abc
 apple
BALL
bat
bat
BASH


필드 분할 및 정렬

/etc/passwd 파일같이 라인이 필드로 구분되어 있고 여기서 특정 필드를 기준으로 정렬해야 하는 경우가 있습니다.


예로 아래의 명령은 라인의 맨 앞이 사용자의 id 이므로 id 로 정렬합니다.

$  sort  /etc/passwd

adm:x:3:4:adm:/var/adm:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
BASH


하지만 4번째 필드인 group id  로 정렬해야 할 경우 필드를 지정하는 옵션인 -t 와 정렬할 key 를 지정하는 옵션인 -k 를 사용하면 sort 는 해당 필드를 기준으로 정렬합니다.


-t 뒤에는 구분자 지정하며 /etc/passwd 파일의 경우 구분자가 : 이며 -t: 으로 사용하면 됩니다. -k 옵션뒤에는 정렬한 키를 지정하는데 4n 은 4번째 컬럼을 numeric 으로 비교하겠다는 의미입니다.

$ sort -t: -k 4n /etc/passwd

halt:x:7:0:halt:/sbin:/sbin/halt
operator:x:11:0:operator:/root:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
sync:x:5:0:sync:/sbin:/bin/sync
BASH


다음 명령은 사용자의 홈 디렉터리를 기준으로 정렬합니다.

$ sort -t: -k 6 /etc/passwd

bin:x:1:1:bin:/bin:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
unbound:x:997:995:Unbound DNS resolver:/etc/unbound:/sbin/nologin
ec2-user:x:1000:1000:Cloud User:/home/ec2-user:/bin/bash
root:x:0:0:root:/root:/bin/bash
BASH


같이 보기

Ref