정렬(Unix)

sort (Unix)
종류
Sortunix.png
sort명령어
원저작자Ken Thompson (AT&T Bell 연구소)
개발자다양한 오픈 소스 및 상용 개발자
초기 릴리즈1971년 11월 3일, 50년 전(1971-11-03)
기입처C
운영 체제멀티ics, Unix, Unix like, V, Plan 9, Inferno, MSX-DOS, IBM i
플랫폼크로스 플랫폼
유형명령어
면허증.코어 유틸리티: GPLv3+
계획 9: MIT 라이선스

컴퓨팅에서 sort는 Unix 및 Unix와 유사운영 체제의 표준 명령줄 프로그램으로, 인수 목록에 나열된 모든 파일의 입력 또는 연결 줄을 정렬된 순서로 인쇄합니다.정렬은 각 입력 행에서 추출된 하나 이상의 정렬 키에 따라 수행됩니다.기본적으로는 입력 전체가 정렬 키로 간주됩니다.기본 필드 구분 기호는 공백입니다.이 명령어는 구현에 따라 다를 수 있는 많은 명령줄 옵션을 지원합니다.예를 들어 "-r" 플래그는 정렬 순서를 바꿉니다.

역사

A sort일반적인 정렬 기능을 호출하는 명령어는 Multics [1]에서 처음 구현되었습니다.버전 1 Unix에서 등장했습니다.이 버전은 AT&T Bell Laboraties의 Ken Thompson에 의해 원래 작성되었습니다.버전 4에서는 Thompson이 파이프를 사용하도록 수정했지만, sort에서는 파일을 정렬하는 데 사용되었기 때문에 출력 파일에 이름을 붙일 수 있는 옵션이 유지되었습니다.버전 5에서 Thompson은 표준 [2]입력을 나타내는 "-"를 발명했습니다.

의 버전 GNUcoreutils에 번들된 정렬은 Mike Haertel과 Paul Egert에 [3]의해 작성되었습니다.이 실장에서는, Marge Sort 알고리즘이 채용되고 있습니다.

다른 많은 운영 체제에서도 유사한 명령을 사용할 수 있습니다. 예를 들어 정렬 명령은 ASCII의 MSX-DOS 버전 [4]2용 MSX-DOS2 도구의 일부입니다.

sort 명령어는 IBM i 운영 [5]체제에도 이식되었습니다.

구문

[OPTION]...[FILE] 정렬... 

없음FILE또는 언제FILE-명령어는 표준 입력에서 읽습니다.

파라미터

이름. 묘사 유닉스 플랜 9 지옥 FreeBSD 리눅스 MSX-DOS IBM i
-b,
--선도적으로 리드-선도적 사람-선도적 사람-선도적.
선행 공백을 무시합니다. 네. 네. 아니요. 네. 네. 아니요. 네.
-c 입력 파일이 정렬되었는지 확인합니다. 아니요. 네. 아니요. 네. 네. 아니요. 네.
-C -c와 비슷하지만 첫 번째 불량 행은 보고하지 않습니다. 아니요. 아니요. 아니요. 네. 네. 아니요. 아니요.
-d,
--기본순서
공백 및 영숫자만 고려합니다. 네. 네. 아니요. 네. 네. 아니요. 네.
-f,
--대소문자
소문자를 대문자로 접습니다. 네. 네. 아니요. 네. 네. 아니요. 네.
-g,
--general-module-module,
--syslog=general-syslog
일반적인 수치로 비교합니다. 네. 네. 아니요. 네. 네. 아니요. 아니요.
-h,
--인간-인간-인간-인간-인간-인간-인체-인체,
--param=인간의 보호
사람이 읽을 수 있는 숫자(2K 1G 등)를 비교합니다. 네. 아니요. 아니요. 네. 네. 아니요. 아니요.
-i,
--비인쇄
인쇄 가능한 문자만 고려합니다. 네. 네. 아니요. 네. 네. 아니요. 네.
-k,
--키=POS1[,POS2]
를 POS1(원래 1)에서 시작하여 POS2(기본 행 끝)에서 종료합니다. 아니요. 아니요. 아니요. 네. 네. 아니요. 아니요.
-m 머지만. 입력 파일은 사전 정렬된 것으로 간주됩니다. 아니요. 네. 아니요. 네. 네. 아니요. 네.
- M,
--월간,
--contrace=월
비교(알 수 없음) < 'JAN' <...< DEC > 。 네. 네. 아니요. 네. 네. 아니요. 아니요.
-n,
--context-matrix,
--syslog=개요
문자열 수치로 비교합니다. 네. 네. 네. 네. 네. 아니요. 네.
-o 산출량 표준 출력 대신 OUTPUT 파일을 사용합니다. 아니요. 네. 아니요. 네. 네. 아니요. 네.
-r,
--마이너스
비교 결과를 뒤집습니다. 네. 네. 네. 네. 네. 아니요. 네.
-R,
--context-matrix,
--syslog=개요
shuffle을 사용하지만 동일한 키를 그룹화합니다.참고 항목: shuf 네. 아니요. 아니요. 네. 네. 아니요. 아니요.
-s 라스트 리소스 비교를 디세블로 하여 정렬을 안정시킵니다. 아니요. 아니요. 아니요. 네. 네. 아니요. 아니요.
-사이즈
--size-c-size=크기
메모리 버퍼의 최대 크기에 크기를 사용합니다. 아니요. 아니요. 아니요. 네. 아니요. 아니요. 아니요.
-스위치 구분 필드를 구분하는 '탭 문자'는 x입니다. 아니요. 네. 아니요. 아니요. 네. 아니요. 네.
- ,
--field-param=
공백이 아닌 공백으로 변환하는 대신 char를 사용합니다. 아니요. 아니요. 아니요. 네. 네. 아니요. 아니요.
- Tdir,
--block-directory=디르
임시로 dir를 사용합니다. 아니요. 네. 아니요. 네. 네. 아니요. 아니요.
-u,
--마이너스
동일한 키를 가진 각 회선 세트 중 1개만 제외하고 모든 것을 억제하는 고유 처리. 아니요. 네. 아니요. 네. 네. 아니요. 네.
- ,
--버전 인식
텍스트 내의 자연스러운 종류의 (버전) 숫자 아니요. 아니요. 아니요. 네. 네. 아니요. 아니요.
-w -i와 비슷하지만 탭과 공백만 무시합니다. 아니요. 네. 아니요. 아니요. 아니요. 아니요. 아니요.
-z,
--제로 종단
줄바꿈이 아닌 0바이트의 끝줄 아니요. 아니요. 아니요. 네. 네. 아니요. 아니요.
--도움말 도움말 표시 및 종료 아니요. 아니요. 아니요. 네. 네. 아니요. 아니요.
--버전 버전 정보 출력 및 종료 아니요. 아니요. 아니요. 네. 네. 아니요. 아니요.
/R 비교 결과를 뒤집습니다. 아니요. 아니요. 아니요. 아니요. 아니요. 네. 아니요.
/S 각 행의 몇 자리수를 판정할지를 결정하는 자리수를 지정합니다. 아니요. 아니요. 아니요. 아니요. 아니요. 네. 아니요.
/A ASCII 코드로 정렬합니다. 아니요. 아니요. 아니요. 아니요. 아니요. 네. 아니요.
/H 와일드카드를 사용할 때 숨김 파일을 포함합니다. 아니요. 아니요. 아니요. 아니요. 아니요. 네. 아니요.

파일을 알파벳 순으로 정렬합니다.

$ 고양이 전화번호부 스미스, 브렛 555-4321 도,555-1234 도, 제인 555-3214 에이버리, 코리 555-4132 포가티, 수지 555-2314
$분류 전화번호부 에이버리, Cory 555-4132 Doe, Jane 555-3214 Doe, John 555-1234 Fogarty, Suzie 555-2314 Smith, Brett 555-4321

번호순 정렬

-n옵션을 지정하면 프로그램이 숫자 값에 따라 정렬됩니다.du 명령어는 파일사이즈라는 숫자로 시작하는 출력을 생성합니다.따라서 출력의 파이핑을 통해 파일사이즈별로 정렬된 파일목록을 생성할 수 있습니다.

$du /bin/* 정렬 -n 4 /bin/domainname 24 /bin/ls 102 /bin/sh 304 /bin/csh

ls 옵션을 지정한 find 명령어는 파일사이즈를 7번째 필드에 출력하기 때문에 파일사이즈별로 정렬된 LaTeX 파일의 리스트는 다음과 같이 작성됩니다.

$ find . - name " . tex " - ls sort - k

열 또는 필드

를 사용합니다.-k옵션을 사용하여 특정 열을 정렬할 수 있습니다.예를 들어 "를 사용합니다.-k 2두 번째 열에 정렬합니다.이전 버전에서는+1옵션에서 프로그램을 데이터의 두 번째 열에 정렬했습니다(+2(3번째 등)이 사용법은 권장되지 않습니다.

$ cat zipcode Adam 12345 Bob 34567 Joe 56789 Sam 45678 Wendy 23456
$ sort - k 2n 우편번호 Adam 12345 Wendy 23456 Bob 34567 Sam 45678 Joe 56789

여러 필드에서 정렬

-k m,n옵션을 사용하면 여러 필드로 구성될 수 있는 키를 정렬할 수 있습니다(컬럼에서 시작).m, 컬럼에서 끝납니다.n):

$ cat 쿼터 fred 2000 bob 10001000 chad 1000 don 1500 eric 500
$ sort -k2,2n -k1,1 쿼터 eric 500 an 1000 bob 1000 chad 1000 don 1500 fred 2000

여기서는 열 2를 사용하여 첫 번째 정렬을 수행합니다. -k2,2n는 열 2로 시작하는 키와 끝나는 키를 정렬하고 숫자 정렬을 지정합니다.한다면-k2대신 정렬 키가 컬럼2에서 시작하여 행의 마지막까지 확장되어 그 사이에 있는 모든 필드에 걸쳐 있습니다. -k1,1는 열 1의 값을 사용하여 연결을 끊고 기본적으로 알파벳 순으로 정렬하도록 지정합니다.bob과 chad는 같은 쿼터를 가지며 최종 출력에서 알파벳 순으로 정렬됩니다.

파이프 구분 파일 정렬

$ sort -k2,2,-k1,1 -t' 우편번호 Adam 12345 Wendy 23456 Sam 45678 Joe 56789 Bob 34567

탭 구분 파일 정렬

구분 을 사용하여 파일을 정렬하려면 탭 문자를 열 구분 기호로 지정해야 합니다.이 그림에서는 셸의 달러 따옴표기를[6][7] 사용하여 을 C 이스케이프 시퀀스로 지정합니다.

$sort - k2,2 -t 
                
\t' 전화번호부 도우, 555-1234 포가티, 수지 555-2314 도우, 제인 555-3214 에이버리, 코리 555-4132 스미스, 브렛 555-4321

역순으로 정렬

-roption은 정렬 순서를 반대로 합니다.

$ sort - rk 2n 우편번호 Joe 56789 Sam 45678 Bob 34567 Wendy 23456 Adam 12345

랜덤 정렬

GNU 구현에는-R --random-sort해시를 기반으로 하는 옵션. 동일한 행을 정렬하기 때문에 완전한 랜덤 셔플이 아닙니다.Unix 유틸리티 shuf는 진정한 랜덤 정렬을 제공합니다.

버전별 정렬

GNU 구현에는-V --version-sort텍스트 내의 자연스러운 (버전) 숫자 옵션입니다.비교하는 2개의 텍스트 문자열은 문자 블록과 숫자 블록으로 분할됩니다.문자 블록은 영숫자로 비교되고 숫자 블록은 숫자로 비교됩니다(선행 0을 건너뛰면 숫자가 많아지고 그렇지 않으면 왼쪽 끝의 숫자가 결과를 결정합니다).블록은 왼쪽에서 오른쪽으로 비교되며, 이 루프의 첫 번째 동일하지 않은 블록은 어떤 텍스트가 더 큰지 결정합니다.이것은 IP 주소, Debian 패키지 버전 문자열 및 가변 길이의 수가 문자열에 포함된 유사한 작업에 대해 작동합니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ "Multics Commands". www.multicians.org.
  2. ^ McIlroy, M. D. (1987). A Research Unix reader: annotated excerpts from the Programmer's Manual, 1971–1986 (PDF) (Technical report). CSTR. Bell Labs. 139.
  3. ^ "sort(1): sort lines of text files - Linux man page". linux.die.net.
  4. ^ "MSX-DOS2 Tools User's Manual - MSX-DOS2 TOOLS ユーザーズマニュアル". April 1, 1993 – via Internet Archive.
  5. ^ IBM. "IBM System i Version 7.2 Programming Qshell" (PDF). Retrieved 2020-09-05.
  6. ^ "The GNU Bash Reference Manual, for Bash, Version 4.2: Section 3.1.2.4 ANSI-C Quoting". Free Software Foundation, Inc. 28 December 2010. Retrieved 1 February 2013. Words of the form
$$SIDE_BOTTOM$$
    $$BOTTOM$$