컴퓨팅에서, sort는 인수 목록에 나열된 모든 파일의 입력 또는 연쇄의 행을 정렬된 순서로 인쇄하는 유닉스와 유닉스-계열 운영 시스템의 표준 명령줄 프로그램입니다. 정렬은 각 입력 줄에서 추출된 하나 이상의 정렬 키를 기반으로 수행됩니다. 기본적으로, 전체 입력이 정렬 키로 취해집니다. 공백은 기본 필드 구분 기호입니다. 그 명령은 구현에 따라 다를 수 있는 여러 명령줄 옵션을 지원합니다. 예를 들어 "-r" 플래그는 정렬 순서를 반대로 할 것입니다.
History
일반 정렬 기능을 호출하는 sort 명령은 먼저 Multics 내에서 구현되었습니다. 나중에, 그것은 버전 1 유닉스에 등장했습니다. 이 버전은 원래 AT&T 벨 연구소에서 Ken Thompson에 의해 작성되었습니다. 버전 4까지, Thompson은 파이프를 사용하도록 그것을 수정했지만, sort는 파일을 제자리에 정렬하기 위해 사용되었기 때문에 출력 파일의 이름을 지정하는 옵션을 유지했습니다. 버전 5에서 Thompson은 표준 입력을 나타내기 위해 "-"를 발명했습니다.
GNU coreutils에 번들된 sort 버전은 Mike Haertel와 Paul Eggert에 의해 작성되었습니다. 이 구현은 병합 정렬 알고리듬을 사용합니다.
유사한 명령이 다른 많은 운영 시스템에서도 사용할 수 있습니다. 예를 들어, sort 명령은 ASCII의 MSX-DOS 버전 2에 대해 MSX-DOS2 도구의 일부입니다.
sort 명령은 역시 IBM i 운영 시스템에 이식되었습니다.
Syntax
sort [OPTION]... [FILE]...
FILE없이, 또는 FILE가 -일 때, 그 명령은 표준 입력으로부터 읽습니다.
Parameters
이름 | 설명 | 유닉스 | Plan 9 |
Inferno | FreeBSD | 리눅스 | MSX- DOS |
IBM i |
-b, --ignore-leading- blanks |
선행하는 공백을 무시합니다. | Yes | Yes | No | Yes | Yes | No | Yes |
-c | 입력 파일이 정렬되었는지 확인합니다. | No | Yes | No | Yes | Yes | No | Yes |
-C | -c와 유사하지만, 첫 번째 잘못된 행을 보고하지 않습니다. | No | No | No | Yes | Yes | No | No |
-d, --dictionary-order |
오직 공백과 영어-숫자 문자를 고려합니다. | Yes | Yes | No | Yes | Yes | No | Yes |
-f, --ignore-case |
소문자를 대문자로 접습니다. | Yes | Yes | No | Yes | Yes | No | Yes |
-g, --general-numeric- sort, --sort=general- numeric |
일반 숫자 값에 따라 비교합니다. | Yes | Yes | No | Yes | Yes | No | No |
-h, --human-numeric- sort, --sort=human- numeric |
인간일 읽을 수 있는 숫자 (예를 들어, 2K 1G)를 비교합니다. | Yes | No | No | Yes | Yes | No | No |
-i, --ignore- nonprinting |
오직 인쇄-가능한 문자를 고려합니다. | Yes | Yes | No | Yes | Yes | No | Yes |
-k, --key=POS1[,POS2] |
POS1 (원본 1)에서 키를 시작하고 POS2 (기본값으로 줄의 끝)에서 키를 끝냅니다. | No | No | No | Yes | Yes | No | No |
-m | 오직 병합; 입력 파일은 미리-정렬된 것으로 가정됩니다. | No | Yes | No | Yes | Yes | No | Yes |
-M, --month-sort, --sort=month |
(미지수) < 'JAN' < ... < 'DEC'를 비교합니다. | Yes | Yes | No | Yes | Yes | No | No |
-n, --numeric-sort, --sort=numeric |
문자열 숫자 값에 따라 비교합니다. | Yes | Yes | Yes | Yes | Yes | No | Yes |
-o OUTPUT | 표준 출력 대신에 OUTPUT 파일을 사용합니다. | No | Yes | No | Yes | Yes | No | Yes |
-r, --reverse |
비교 결과를 반대로 합니다. | Yes | Yes | Yes | Yes | Yes | No | Yes |
-R, --random-sort, --sort=random |
혼합하지만, 동일한 키를 그룹화합니다. 역시 참조: shuf | Yes | No | No | Yes | Yes | No | No |
-s | 마지막-수단 비교를 비활성화함으로써 정렬을 안정화합니다. | No | No | No | Yes | Yes | No | No |
-S size, --buffer-size=size |
메모리 버퍼의 최대 크기에 대해 size를 사용합니다. | No | No | No | Yes | No | No | No |
-tx | 'Tab character' 분리하는 필드는 x입니다. | No | Yes | No | No | Yes | No | Yes |
-t char, --field- separator=char |
비-공백을 공백 전이 대신에 char를 사용합니다. | No | No | No | Yes | Yes | No | No |
-T dir, --temporary- directory=dir |
임시로 dir을 사용합니다. | No | Yes | No | Yes | Yes | No | No |
-u, --unique |
같은 키를 갖는 각 행의 집합에서 하나만 제외하고 모두 억제하기 위한 고유한 처리. | No | Yes | No | Yes | Yes | No | Yes |
-V, --version-sort |
텍스트 내의 (버전) 숫자의 자연스러운 정렬 | No | No | No | Yes | Yes | No | No |
-w | -i와 유사하지만, 오직 탭과 스페이스를 무시합니다. | No | Yes | No | No | No | No | No |
-z, --zero-terminated |
줄 바꿈이 아닌 0바이트로 끝냅니다. | No | No | No | Yes | Yes | No | No |
--help | 도움말을 표시하고 끝냅니다. | No | No | No | Yes | Yes | No | No |
--version | 버전 정보를 출력하고 끝냅니다. | No | No | No | Yes | Yes | No | No |
/R | 비교 결과를 반대로 합니다. | No | No | No | No | No | Yes | No |
/S | 각 행의 몇 자릿수가 판단되어여 하는지 결정하기 위해 자릿수의 개수를 지정합니다. | No | No | No | No | No | Yes | No |
/A | ASCII 코드에 의한 정렬. | No | No | No | No | No | Yes | No |
/H | 와일드 카드를 사용할 때 숨김 파일을 포함합니다. | No | No | No | No | No | Yes | No |
Examples
Sort a file in alphabetical order
$ cat phonebook
Smith, Brett 555-4321
Doe, John 555-1234
Doe, Jane 555-3214
Avery, Cory 555-4132
Fogarty, Suzie 555-2314
$ sort phonebook
Avery, Cory 555-4132
Doe, Jane 555-3214
Doe, John 555-1234
Fogarty, Suzie 555-2314
Smith, Brett 555-4321
Sort by number
-n 옵션은 프로그램을 숫자 값에 따라 정렬하도록 합니다. du 명령은 파일 크기인 숫자로 시작하는 출력을 생성하므로, 그것의 출력은 파일 크기 (오름차순)별로 정렬된 파일 목록을 생성하기 위해 sort로 파이프될 수 있습니다.
$ du /bin/* | sort -n
4 /bin/domainname
24 /bin/ls
102 /bin/sh
304 /bin/csh
Columns or fields
-k 옵션을 특정 열을 정렬하기 위해 사용하십시오. 예를 들어, "-k 2"를 두 번째 열을 정렬하기 위해 사용하십시오. 이전 버전의 sort에서, +1 옵션은 프로그램을 데이터의 두 번째 열 (세 번째 열에 대해 +2 등)을 기준으로 정렬하도록 만듭니다. 이 사용법은 더 이상 사용되지 않습니다.
$ cat zipcode
Adam 12345
Bob 34567
Joe 56789
Sam 45678
Wendy 23456
$ sort -k 2n zipcode
Adam 12345
Wendy 23456
Bob 34567
Sam 45678
Joe 56789
Sort on multiple fields
-k m,n 옵션은 잠재적으로 여러 필드로 구성된 키를 기준으로 정렬하는 것을 허용합니다 (m 열에서 시작하여 n 열에서 끝납니다).
$ cat quota
fred 2000
bob 1000
an 1000
chad 1000
don 1500
eric 500
$ sort -k2,2n -k1,1 quota
eric 500
an 1000
bob 1000
chad 1000
don 1500
fred 2000
여기서 첫 번째 정렬은 열 2를 사용하여 수행됩니다. -k2, 2n은 열 2에서 시작하고 끝나는 키에 대한 정렬을 지정하고, 숫자로 정렬합니다. 만약 -k2가 대신 사용되면, 정렬 키는 열 2에서 시작하고 그 사이의 모든 필드에 걸쳐 줄의 끝까지 확장됩니다. -k1,1은 기본적으로 알파벳순으로 정렬하는 열 1에서 값을 사용하여 관계를 끊도록 지시합니다. bob 및 chad는 같은 할당량을 가지고 최종 출력에서 알파벳순으로 정렬됨을 주목하십시오.
Sorting a pipe delimited file
$ sort -k2,2,-k1,1 -t'|' zipcode
Adam|12345
Wendy|23456
Sam|45678
Joe|56789
Bob|34567
Sorting a tab delimited file
탭으로 구분된 값으로 파일을 정렬하려면 탭 문자를 열 구분 기호로 지정되도록 해야 합니다. 이 묘사는 쉘의 달러-인용 부호 표기법을 C 이스케이프 시퀀스로 탭을 지정하기 위해 사용합니다.
$ sort -k2,2 -t $'\t' phonebook
Doe, John 555-1234
Fogarty, Suzie 555-2314
Doe, Jane 555-3214
Avery, Cory 555-4132
Smith, Brett 555-4321
Sort in reverse
-r 옵션은 단지 정렬의 순서를 반대로 합니다:
$ sort -rk 2n zipcode
Joe 56789
Sam 45678
Bob 34567
Wendy 23456
Adam 12345
Sort in random
GNU 구현은 해싱을 기반으로 하는 -R --random-sort 옵션을 가집니다; 이것은 동일한 줄을 함께 정렬하기 때문에 완전한 무작위 혼합이 아닙니다. 진정한 무작위 정렬은 유닉스 유틸리티 shuf에 의해 제공됩니다.
Sort by version
GNU 구현은 -V --version-sort 옵션을 가지며, 이 옵션은 텍스트 내에서 (버전) 숫자의 자연스러운 정렬입니다. 이것은 ip 주소에서 작동합니다.
Further reading
- Shotts (Jr), William E. (2012). The Linux Command Line: A Complete Introduction. No Starch Press. ISBN 978-1593273897.
- McElhearn, Kirk (2006). The Mac OS X Command Line: Unix Under the Hood. John Wiley & Sons. ISBN 978-0470113851.