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