SORT(1)

명칭
sort - 텍스트 파일을 행으로 정렬 한다

서식
sort [-cmus] [-t separator] [-o output-file] [-T tempdir] [-bdfiMnr] [+POS1 [-POS2]] [-k POS1[, POS2]] [file...]
sort {--help, --version}

해설
이 메뉴얼 페이지는 GNU 판의 sort 에 대해 쓰여져 있습니다. sort (은)는, file 가 지정되어 있으면 그 파일로부터, 파일이 지정되지 않는 경우는 표준 입력으로부터 데이터를 읽어들여, 입력한 각 행에 대해, 정렬나 merge나 비교를 실시합니다. 파일명 `-'는 표준 입력을 의미합니다. sort (은)는 디폴트에서는 표준 출력에 결과를 써냅니다.

sort (은)는, 3 개의 동작 모드를 가지고 있습니다. (디폴트의) 정렬와 merge와 소트 되고 있는지 어떤지의 체크입니다. 이하의 옵션으로 동작 모드를 변경합니다.

-c  파일이 이미 정렬 된 것인지 어떤지 체크합니다. 만약, 정렬 되지 않으면, 에러 메세지를 표시 함과 동시에, 반환값에 1 을 돌려줍니다.

-m  복수의 파일을 한묶음 해 정렬 하는 것으로, 그것들을 merge 합니다. 개개의 파일은, 미리 정렬 해 두지 않으면 안됩니다. 정렬는 언제라도 merge 대신에 움직입니다. merge의 옵션이 있는 것은, 단순한 merge로 해결되는 경우에는, 그 쪽이 훨씬 고속이기 때문에입니다.

입력행은 다음과 같이 해 비교됩니다. 키필드가 지정되어 있을 때에는, sort (은)는, 차이가 발견될까 키필드가 없어질 때까지, 명령행으로 지정된 순서에, 키필드끼리를, 관련 지을 수 있었던 순서 옵션에 따라 비교합니다.

만약 글로벌 옵션 Mbdfinr 의 어떤 것인가가 지정되어 키필드가 지정되지 않으면, sort (은)는 글로벌 옵션에 따라, 행 전체를 비교합니다.

모든 키가 동일한 경우 (또는 순서를 지시하는 옵션이 전혀 지정되어 있지 않은 경우) , sort (은)는 최종 수단으로서 그 머신에서의 캐릭터의 조합순서 (machine collating sequence)에 따라, 각 행을 바이트마다 비교합니다. 이 최종 수단에 대해서는, -r 옵션이 유효합니다. -s (stable) 옵션은, 이 최종 수단의 비교를 그만두어, 모든 키필드가 동일한 행끼리의 상대적인 출현순서를 유지합니다. 키필드나 글로벌 옵션을 전혀 지정하지 않을 때에는 -s (은)는 효과를 가지지 않습니다.

GNU sort 에는, 입력행의 길이의 제한 (행에 포함되는 바이트수의 제한)은 없습니다. 또, 입력 파일의 마지막 1 바이트가 개행 캐릭터가 아닐 때로는, GNU sort (은)는 입다물어 개행 캐릭터를 보충해 처리를 실시합니다.

환경 변수 TMPDIR 하지만 설정되어 있는 경우, sort (은)는, 디폴트의 /tmp 대신에, 이것을 작업 파일을 두는 디렉토리로서 이용합니다. -T tempdir 옵션도 작업 파일용 디렉토리의 지정에 사용할 수 있습니다. 이 지정은 환경 변수보다 우선됩니다.

이하에 나타내는 옵션에 의해, 출력행의 순서부를 제어할 수 있습니다. 이것들은 글로벌로 지정하거나 특정의 키필드에 대해 지정할 수도 있습니다. 키필드를 지정하지 않을 때로는, 글로벌 옵션은 행 전체의 비교에 적용됩니다. 키필드를 지정했을 때에는, 그것 고유의 지정을 가지지 않는 키필드에 글로벌 옵션의 동작이 계승됩니다.

-b  정렬 키를 찾아낼 때, 선두에 있는 공백을 무시합니다.

-d  `전화번호부순서'로 정렬 합니다. 알파벳, 숫자, 공백 이외의 캐릭터를 무시합니다.

-f  영소문자는 대문자로 고쳐 정렬 합니다. 예를 들면, `b'는 `B'와 같게 정렬 됩니다.

-i  ASCII 인 040~0176 (8진, 양단을 포함한다)의 범위에 포함되지 않는다 캐릭터를 무시합니다.

-M  행선지두에 있는, 공백의 뒤로 달의 영어명의 약칭이 계속된 캐릭터 라인을, 대문자로 변환한 다음, `JAN' < `FEB' < ... < `DEC'의 순서로 비교합니다. 달의 명칭이 아닌 캐릭터 라인은, 달의 명칭의 캐릭터 라인보다 작다고 보여집니다.

-n  행선지두에 있는 숫자열을, 수치로서 비교합니다. 숫자열은, 공백 (옵션), 마이너스 부호 (옵션), 0 개 이상의 숫자, 소수점과 0 개 이상의 숫자의 조 (옵션) (으)로부터 구성됩니다.

-r  비교 결과를 반대로 해, 보다 큰 키치를 가지는 행이 출력으로 먼저 나오도록(듯이) 합니다.

그 외의 옵션은 이하와 같습니다.

-o output-file
    결과를 표준 출력 대신에, output-file 에 출력합니다. output-file 하지만 입력 파일의 1 개인 경우, sort (은)는 정렬 해 결과를 써내기 전에, 그 입력 파일을 작업 파일에 카피합니다.

-t separator
    캐릭터 separator (을)를, 각 행으로 정렬 키를 결정할 때의 필드 단락으로 합니다. 디폴트에서는, 공백이 아닌 캐릭터와 공백 캐릭터의 사이에 필드를 단락짓습니다. 예를 들면,` foo bar'라고 하는 행은,` foo'와 ` bar'라고 하는 2 개(살)의 필드로 나눌 수 있습니다. 즉, 입력행 ` foo bar'가 주어졌을 경우, sort (은)는, 이 행을 필드 ` foo'와 ` bar'에 분할합니다. 필드 단락의 캐릭터는, 그 전의 필드의 일부라고 보여지지 못하고, 또, 그 후의 필드의 일부라고도 보여지지 않습니다.

-u  디폴트의 경우, 및 -m 옵션이 지정되었을 경우, 비교해 동일하다고 여겨진 행 중 최초의 1 행만 출력해, 후는 출력하지 않게 합니다. -c 옵션이 지정되었을 경우는, 같은 내용의 행이 연속하지 않는 것을 체크합니다.

+POS1 [-POS2]
    행 중(안)에서, 정렬의 키로서 사용하는 필드를 지정합니다. 필드는, 행 중(안)에서, 위치 POS1 로부터 시작되어 위치 POS2 까지 (POS2 는 포함하지 않고)의 부분으로부터 됩니다. 필드의 위치와 캐릭터의 위치는 ,함께 0 으로부터 세기 시작합니다.

-k POS1[, POS2]
    정렬 키를 지정하는 이제(벌써) 1 개의 서식입니다. 필드의 위치와 캐릭터의 위치는 ,함께 1 으로부터 세기 시작합니다.

위치의 지정은, f.c 의 형식을 가집니다. f 는 필드 번호의 지정이며, c 는, (+pos의 경우) 필드의 선두로부터 센 선두 캐릭터의 번호, 혹은, (-pos의 경우) 직전의 필드의 말미로부터 센 선두 캐릭터의 번호의 지정입니다. 필드내의 최초의 캐릭터를 지정하는 경우에는, .c 의 부분을 생략 할 수가 있습니다. -b 옵션이 주어졌을 경우, 필드 지정의 .c 의 부분은, (+pos의 경우) 그 필드내의 최초의 비공백 캐릭터로부터, 혹은, (-pos의 경우) 직전의 필드의 뒤의 최초의 비공백 캐릭터로부터 센 위치의 지정이 됩니다.

인수 +pos 나 -pos 에는, 옵션 캐릭터 Mbdfinr (을)를 뒤로 붙일 수도 있습니다. 그 경우에는, 이 필드에는 글로벌인 순서 짓고 옵션은 적용되지 않습니다. -b 옵션은, +pos 와 -pos 의 각각 독립에 지정할 수 있습니다만, 글로벌인 지정이 계승되는 경우에는 양쪽 모두로 지정된 것처럼 일합니다. -n 또는 -M 옵션이 지정되었을 경우, -b 옵션이 암묵중으로 지정되게 됩니다만, 이 -b 옵션은, 키 지정의 +pos 와 -pos 의 양쪽 모두에 일합니다. 키는 복수의 필드에 걸쳐도 상관하지 않습니다.

상기에 가세해 GNU sort 하지만 인수 1 개만 붙여 기동될 때에는, 이하의 옵션이 인식됩니다.

--help
    표준 출력에 사용법의 메세지를 표시해 정상 종료합니다.

--version
    표준 출력에 버젼 정보를 표시해 정상 종료합니다.

호환성
sort 의 역사적인 실장 (BSD 나 System V)이란, 몇개의 옵션, 특히 -b, -f, -n, 의 해석이 다릅니다. GNU sort 는 POSIX 의 동작에 따릅니다만, 그 동작은, 보통 (반드시는 아니다) System V 의 동작과 닮아 있습니다. POSIX 에 의하면, -n 하 -b (을)를 암묵으로 지정하지 않게 되었습니다. 정합성을 취하기 위해서(때문에), -M 도 똑같이 변경되었습니다. 이 결과, 애매한 경우에는, 필드 지정중의 캐릭터의 위치의 의미가 영향을 받는 경우가 있을지도 모릅니다. 이 문제에 직면하면(자), 대응책은, 명시적으로 -b (을)를 지정하는 것입니다.

버그
-k 의 유무에 의해 필드 번호의 의미가 다른 것은 혼란의 원입니다. 이 건에 대해서는 모두 POSIX 가 나쁩니다.