| HOME / 정보공유 / AIX 명령어 모음

sort
sort sort 명령 목적 파일을 분류하고, 이미 분류한 파일을 병합하고, 파일을 검사하여 분류가 완료되었는지 확인합니다. 구문
sort [ -A ] [ -b ] [ -c ] [ -d ] [ -f ] [ -i ] [ -m ] [ -n ] [ -r ] [ -u ] [ -o OutFile ] [ -t Character ] [ -T Directory ] [ -y [ Kilobytes ] ] [ -z RecordSize ] [ [ + [ FSkip ] [ .CSkip ] [ b ] [ d ] [ f ] [ i ] [ n ] [ r ] ] [ - [ FSkip ] [ .CSkip ] [ b ] [ d ] [ f ] [ i ] [ n ] [ r ] ] ] ... [ -k KeyDefinition ] ... [ File ... ]
설명
sort 명령은 File 매개변수로 지정된 파일의 행들을 분류하고 그 결과를 표준 출력에 기록합니다. File 매개변수가 둘 이상의 파일을 지정하는 경우, sort 명령은 파일들을 병합하여 하나의 파일로 분류합니다. 파일 이름 대신 -(빼기 기호)는 표준 입력을 의미합니다. 파일 이름을 지정하지 않으면 표준 입력을 분류합니다. 출력 파일은 -o 플래그로 지정할 수 있습니다.
플래그를 지정하지 않으면 sort 명령이 현재 로케일(locale)의 배열 순서에 따라 입력 파일의 전체 행을 분류합니다.
분류 키
분류 키는 입력 행에서 필드 번호 및 열 번호로 지정하며, 필드는 입력 행을 필드 분리자로 분리합니다. 디폴트 필드 분리자는 하나 이상의 연속된 공백 문자열입니다. -t 플래그를 사용하여 다른 필드 분리자를 지정할 수 있습니다. 탭과 공백 문자는 C 및 영어 로케일에서 공백 문자로 처리됩니다.
분류 키 사용시, sort 명령은 먼저 첫번째 분류 키의 내용에 따라 모든 행들을 분류합니다. 다음은, 첫번째 분류 키가 같은 모든 행을 두 번째 분류 키에 따라 분류합니다. 분류 키는 명령행에 나타나는 순서대로 번호가 매겨집니다. 두 행이 같은 분류 키로 동등하게 분류되는 경우, 전체 행이 현재 로케일의 배열 순서에 따라 비교됩니다.
필드 내의 열의 번호를 매길 때 디폴트 필드 분리자 안의 공백 문자들은 다음 필드로 계산됩니다. 처음 공백은 첫 필드의 일부로 계산되지 않으며, -t 플래그가 지정한 필드 분리자 문자도 필드의 일부로 간주되지 않습니다. -b 플래그를 사용하여 선행 공백 문자를 무시할 수 있습니다.
다음 2가지 방법을 사용하여 분류 키를 정의할 수 있습니다.
-k KeyDefinition
FSkip.CSkip(없어진 버전)
-k 플래그를 사용한 분류 키 정의
-kKeyDefinition 플래그는 다음 양식을 사용합니다.
-k [ FStart [ .CStart ] ] [ Modifier ] [ , [ FEnd [ .CEnd ] ][ Modifier ] ]
분류 키에는 FStart 변수가 지정한 필드에서 시작하는 모든 문자와 CStart 변수가 지정한 열, FEnd 변수가 지정한 필드에서 끝나는 모든 문자 및 CEnd 변수가 지정한 열이 포함됩니다. FEnd를 지정하지 않으면 행의 최종 문자를 끝으로 간주합니다. CEnd를 지정하지 않으면 FEnd 필드에 있는 최종 문자를 끝으로 간주합니다. KeyDefinition 변수의 필드 또는 열 수를 생략할 수 있습니다. 디폴트 값은 다음과 같습니다.
FStart 행의 시작
CStart 필드의 최초 열
FEnd 행의 끝
CEnd 필드의 최종 열
필드 사이에 공백이 있으면 sort는 그 공백을 하나의 필드로 간주합니다.
Modifier 변수의 값은 b, d, f, i, n 또는 r 중 하나 이상의 문자가 될 수 있습니다. 수정자는 접속된 필드 정의에만 적용되며 같은 문자의 플래그와 같은 효과를 같습니다. 수정자 b는 접속된 필드 정의의 끝에만 적용됩니다. 예를 들면
-k 3.2b,3r
세 번째 필드의 두 번째 비공백 열에서 시작하여 세 번째 필드의 끝으로 확장하는 분류 키를 지정하며 이 키에 대한 분류는 배열 순서와 반대로 수행됩니다. FStart 변수 및 CStart 변수가 행의 끝을 벗어나거나 FEnd 변수 및 CEnd 변수 다음에 오면 분류 키가 무시됩니다.
분류 키를 다음 방법으로 지정할 수도 있습니다.
[+[FSkip1] [.CSkip1] [Modifier] ] [-[FSkip2] [.CSkip2] [Modifier]]
+FSkip1 변수는 분류 키의 최초 필드까지 생략한 필드의 수를 지정하며 +CSkip 변수는 해당 필드 안에서 최초 문자까지 생략한 열의 수를 지정합니다. -FSkip 변수는 분류 다음의 첫 문자까지 생략한 필드의 수를 지정하며 -CSkip 변수는 해당 필드 안에서 생략한 열의 수를 지정합니다. 모든 필드 및 열 생략 계수는 생략될 수 있습니다. 다음은 디폴트 값입니다.
FSkip1 행의 시작
CSkip1 0
FSkip2 행의 끝
CSkip2 0
Modifier 변수가 지정한 수정자는 -k 플래그 분류 키 정의와 동일합니다.
+FSkip1.CSkip1 변수로 지정된 필드와 열 번호는 일반적으로 분류 키 자체의 필드 및 열 번호보다 하나 작은데, 이는 이러한 변수가 분류 키에 도달하기 전에 생략될 필드와 열의 수를 지정하기 때문입니다. 예를 들면
+2.1b -3r
세 번째 필드의 두 번째 비공백 열에서 시작하여 세 번째 필드의 끝으로 확장하는 분류 키를 지정하며 이 키에 대한 분류는 배열 순서와 반대로 수행됩니다. 문장 +2.1b는 2개의 필드가 생략된 뒤 선행 공백과 하나 이상의 열이 생략된다고 지정합니다. +FSkip1.CSkip1 변수가 행의 끝을 벗어나거나 -FSkip2.CSkip2 변수 다음에 오면 분류 키가 무시됩니다.
주: 행의 최대 필드 수는 10입니다.
플래그
주: 분류 키 정의 앞에 나타나는 -b, -d, -f, -i, -n 또는 -r 플래그는 모든 분류 키에 적용됩니다. -b, -d, -f, -i, -n 또는 -r 플래그는 -kKeyDefinition 다음에 단독으로 표시될 수 없으며, KeyDefinition 변수에 수정자로 접속되는 경우 접속된 분류 키에만 적용됩니다. 이러한 플래그 중 하나가 +Fskip.Cskip 또는 -Fskip.Cskip 분류 키 정의 다음에 오는 경우, 플래그는 해당 분류 키에만 적용됩니다.
-A 현재 로케일에 있는 배열 대신 ASCII 배열 순서를 사용하여 바이트별 기준으로 분류합니다.
-b 선행 공간과 탭을 무시하고 필드의 최초 또는 최종 열을 찾습니다.
-c 입력이 플래그에 지정된 순서 규칙에 따라 분류되는지 검사합니다. 입력 파일이 정확하게 분류되지 않으면 0이 아닌 값을 리턴합니다.
-d 사전 순서를 사용하여 분류합니다. 비교시에 문자, 숫자 및 공간만 고려됩니다.
-f 비교하기 전에 모든 소문자를 대문자로 변경합니다.
-i 비교중에 모든 비인쇄 문자를 무시합니다.
-k KeyDefinition 분류 키를 지정합니다. KeyDefinition 옵션의 형식은 다음과 같습니다.
[FStart [.CStart ] ] [Modifier ] [, [FEnd [.CEnd ] ][Modifier ] ]
분류 키에는 FStart 변수가 지정한 필드에서 시작하는 모든 문자와 CStart 변수가 지정한 열, FEnd 변수가 지정한 필드에서 끝나는 모든 문자 및 CEnd 변수가 지정한 열이 포함됩니다. Modifier 변수의 값은 b, d, f, i, n, r이 될 수 있습니다. 수정자는 같은 문자의 플래그와 같습니다.
-m 복수 입력 파일을 병합만 합니다. 입력은 이미 분류한 것으로 간주합니다.
-n 숫자 필드를 연산 값에 따라 분류합니다. 숫자 필드에는 선행 공백, 선택적 빼기 부호, 십진수, 천 단위 분리자 및 선택적 기수 문자가 포함될 수 있습니다. 비숫자가 포함되어 있는 필드를 숫자별로 분류하면 예상치 못한 결과가 발생합니다.
-o OutFile 출력을 표준 출력 대신 OutFile 매개변수가 지정한 파일로 지정합니다. OutFile 매개변수의 값은 File 매개변수와 같을 수 있습니다.
-r 지정된 분류의 순서를 반대로 합니다.
-tCharacter Character를 단일 필드 분리 문자로 지정합니다.
-u 분류 키 및 옵션에 따라 똑같이 분류된 여러 행 중에서 한 행만 표시합니다.
-TDirectory 작성한 모든 임시 파일을 Directory 매개변수가 지정한 디렉토리에 놓습니다.
-y[Kilobytes] Kilobytes 매개변수로 지정된 주기억장치의 킬로바이트 수만큼을 사용하여 sort 명령을 시작하고 필요에 따라 기억장치를 추가합니다(Kilobytes 매개변수에 지정된 값이 최소 기억장치 사이트보다 적고 최대 값보다는 큰 경우, 대신 최소 또는 최대 값이 사용됩니다). -y 플래그가 생략되면, sort 명령은 디폴트 기억장치 크기로 시작됩니다. -y0 플래그는 최소 기억장치로 시작되고 -y 플래그(Kilobytes 값 없이)는 최대 기억장치로 시작됩니다. sort 명령이 사용하는 기억장치의 양은 성능에 상당한 영향을 미칩니다. 큰 기억장치에서 작은 파일을 분류하는 것은 낭비입니다.
-z RecordSize 분류할 행이 디폴트 버퍼 크기보다 길 때 비정상적으로 종료되지 않게 합니다. -c 또는 -m 플래그 지정시, 분류 단계가 생략되고 시스템 디폴트 버퍼 크기가 사용됩니다. 분류된 행이 이 크기보다 긴 경우, 분류가 비정상적으로 종료됩니다. -z 옵션은 분류 단계에서 가장 긴 행의 기록을 지정하므로, 적절한 버퍼를 병합 단계에 할당할 수 있습니다. RecordSize는 병합될 가장 긴 행보다 크거나 같은 바이트 수로 값을 지정해야 합니다.
종료 상태
이 명령은 다음과 같은 종료 값을 리턴합니다.
0 모든 입력 파일을 성공적으로 출력했거나, -c가 지정되고 입력 파일이 정확하게 분류되었습니다.
1 -c 옵션하에서 파일이 지정한 대로 분류되지 않았거나 -c 및 -u 옵션을 모두 지정한 경우 동일한 키를 갖는 2개의 입력 행이 있습니다.
>1 오류가 발생하였습니다.
예제
fruits 파일을 En_US에 설정한 LC_ALL, LC_COLLATE 또는 LANG 환경 변수로 분류하려면 다음과 같이 입력하십시오.
LANG=En_US sort fruits
이 명령열은 사전식 오름차순으로 분류한 fruits 파일의 내용을 보여줍니다. 공백, 숫자 및 특수 문자를 포함하여 각 열에 있는 문자를 하나씩 비교합니다. 예를 들면, fruits 파일에는 다음 텍스트가 포함되어 있습니다.
banana
orange
Persimmon
apple
%%banana
apple
ORANGE
sort 명령은 다음을 표시합니다.
%%banana
ORANGE
Persimmon
apple
apple
banana
orange
ASCII 배열 순서에서 %(백분률 기호)는 대문자 앞에 오며 대문자는 소문자 앞에 옵니다. 현재 로케일이 ASCII 이외의 문자 세트를 지정하면 결과가 다를 수 있습니다.
사전 순으로 분류하려면 다음과 같이 입력하십시오.
sort -d fruits
이 명령열은 fruits 파일의 내용을 문자, 숫자 및 공간만 비교하고 분류해서 보여줍니다. fruits 파일이 예 1과 동일하다면 sort 명령의 결과는 다음과 같습니다.
ORANGE
Persimmon
apple
apple
%%banana
banana
orange
-d 플래그는 %(백분률 기호)가 문자, 숫자 또는 공간이 아니기 때문에 %%banana를 banana로 대체합니다.
대문자가 포함되어 있는 행과 유사한 소문자 행이 있는 특수 문자를 그룹지으려면 다음과 같이 입력하십시오.
sort -d -f fruits
-d 플래그는 특수 문자를 무시하고 -f 플래그는 대소문자의 차이점을 무시합니다. LC_ALL, LC_COLLATE 또는 LANG 환경 변수가 C로 설정되어 있으면 fruits 파일의 출력은 다음과 같습니다.
apple
apple
%%banana
banana
ORANGE
orange
Persimmon
같은 행을 제거하고 분류하려면 다음을 입력하십시오.
sort -d -f -u fruits
-u 플래그는 sort 명령에서 같은 행을 제거하여 파일의 각 행을 고유하게 만들도록 합니다. 이 명령의 결과는 다음과 같습니다.
apple
%%banana
orange
Persimmon
apple뿐만 아니라 banana 및 ORANGE도 제거됩니다. 이는 -d 플래그가 %% 특수 문자를 무시하고 -f 플래그가 대소문자의 차이점을 무시하기 때문입니다.
예 4와 같이, 대소문자나 구둣점의 차이가 없는 같은 행을 제거하려면 다음과 같이 입력하십시오.
sort -u +0 -d -f +0 fruits
+0 -d -f를 입력하면 예제 3에서 -d -f로 수행된 것과 분류 유형이 같습니다. +0은 동일하지 않은 행을 구별하기 위해 또 다른 비교를 수행합니다 그러면 -u 플래그가 행을 제거하지 못하게 됩니다.
예 1에 표시된 fruits 파일에서 추가된 +0이 %%banana와 banana를 구별하고 ORANGE와 orange를 구별합니다. 그러나 apple의 2가지 인스턴스는 동일하기 때문에 그 중 하나는 삭제됩니다.
apple
%%banana
banana
ORANGE
orange
Persimmon
필드를 분리하는 문자를 지정하려면 다음을 입력하십시오.
sort -t: +1 vegetables
이 명령은 vegetables 각 행의 최초 콜론 다음에 오는 텍스트를 비교하여 파일을 분류합니다. +1은 최초 필드를 무시하고 두 번째 필드부터 행의 끝까지 비교하라고 sort 명령에게 통지합니다. -t: 플래그는 sort 명령에서 콜론으로 필드를 분류하도록 합니다. vegetables의 내용이 다음과 같을 경우,
yams:104
turnips:8
potatoes:15
carrots:104
green beans:32
radishes:5
lettuce:15
LC_ALL, LC_COLLATE 또는 LANG 환경 변수가 C로 설정되어 있으면 sort 명령의 결과는 다음과 같습니다.
carrots:104
yams:104
lettuce:15
potatoes:15
green beans:32
radishes:5
turnips:8
숫자가 숫자순으로 되어 있지 않다는 사실에 주의하십시오. 이것은 사전식 분류 방식에 따라 좌측부터 우측으로 각 문자를 비교했기 때문입니다. 다시 말해 3이 5 앞에 오기 때문에 32가 5 앞에 옵니다.
숫자를 분류하려면 다음과 같이 입력하십시오.
sort -t: +1 -n vegetables
이 명령 열은 vegetables 파일의 두 번째 필드를 숫자로 분류합니다. vegetables 파일이 예 6과 동일하면 sort 명령은 다음을 표시합니다.
radishes:5
turnips:8
lettuce:15
potatoes:15
green beans:32
carrots:104
yams:104
하나 이상의 필드를 분류하려면 다음과 같이 입력하십시오.
sort -t: +1 -2 -n +0 -1 -r vegetables
또는
sort -t: -k2,2 n -k1,1 r vegetables
이 명령 열은 두 번째 필드(+1 -2 -n)에서 숫자 분류를 수행합니다. 같은 순서 안에서, 영문자 역순으로 첫번째 필드를 분류합니다(+0 -1 -r). LC_ALL, LC_COLLATE 또는 LANG 환경 변수가 C로 설정되어 있으면 출력은 다음과 같습니다.
radishes:5
turnips:8
potatoes:15
lettuce:15
green beans:32
yams:104
carrots:104
명령은 행을 숫자순으로 분류합니다. 두 행에 동일한 숫자가 있으면 영문자 역순으로 나타납니다.
원래 파일을 분류한 텍스트로 대체하려면 다음과 같이 입력하십시오.
sort -o vegetables vegetables
이 명령 열은 분류된 내용을 vegetables 파일에 저장합니다(-o vegetables).
파일
/usr/bin/sort sort 명령이 포함되어 있습니다.
/var/tmp sort 명령 처리 중에 사용되는 임시 영역입니다.
/usr/tmp /var/tmp에 파일을 작성할 수 없는 경우, sort 명령이 처리 중에 사용되는 임시 영역입니다.
/tmp /var/tmp 또는 /usr/tmp에 파일을 작성할 수 없는 경우, sort 명령이 처리 중 사용하는 임시 영역입니다.
관련 정보
comm 명령, join 명령 및 uniq 명령.