다음 예에서 sort 명령이 작동하는 방식을 이해하는 데 도움이 필요합니다.
고양이 테스트 파일
입력 데이터:
thisfilehasduplicates
thissnowhasfallen
thisduckhasdied
thishallwasfull
berthammwasaclown
fredsimmisprimeminister
fredalbaisabinman
janetyceisscottish
janeouseisenglish
janellyriswelsh
여기서 목적은 처음 4개 문자를 기준으로 정렬하고 중복 항목을 제거하는 것입니다. 나는 -k1.1,1.4
이것이 첫 번째 필드의 처음 4개 문자를 기준으로 정렬되어 달성된다는 것을 읽었습니다 . 쉼표는 의미가 있는 문자 범위 1.4
(필드 1, 문자 4)를 나타냅니다.
sort -u -t -k1.1,1.4 테스트 파일
-t
이 버전 은 필드 구분 기호가 없음을 의미하기 위해 공백이 뒤에 오는 것으로 해석했지만 필드 구분 기호가 공백이지만 어떻게든 및 -k
플래그를 방해 -u
하고 내가 원하는 것을 제공하지 않는다는 의미일 수도 있다고 생각했습니다.
berthammwasaclown
fredalbaisabinman
fredsimmisprimeminister
janellyriswelsh
janeouseisenglish
janetyceisscottish
thisduckhasdied
thisfilehasduplicates
thishallwasfull
thissnowhasfallen
sort -u -k1.1,1.4 테스트 파일
플래그가 없는 이 버전 -t
은 필요한 기능을 제공합니다. 처음 4개 문자의 중복 제거는 적어도 그렇게 하는 것 같습니다.
berthammwasaclown
fredalbaisabinman
janellyriswelsh
thisduckhasdied
내 배포판(SunOS 5.10)의 매뉴얼 페이지를 읽었지만 특히 중요한 사양에서 점 표기법을 사용할 때 -k
및 -t
플래그와 관련된 부분을 완전히 이해하지 못합니다.
답변1
sort -u -t -k1.1,1.4 testfile
이 버전을 -t 뒤에 공백이 따라오는 것으로 해석하면 필드 구분 기호가 없다는 뜻이지만, 이는 필드 구분 기호가 공백이라는 뜻일 수도 있다고 생각합니다.
그 어느 것도 아닙니다. Unix의 프로그램에 전달된 인수의 토큰화는 대부분의 Unix 프로그램에서 프로그램이 아닌 셸에 의해 정의됩니다. 옵션/플래그(선행 인수)에 값이 필요하고 다음과 같이 전달하지 않는 경우입니다. 인수의 일부인 경우 다음 인수가 값으로 사용됩니다. 필드 구분 기호 -t -k1.1,1.4
로 사용되며 -k1.1,1.4
한 문자(예: )로 자릅니다 -
. 따라서 -k
해당 옵션이 인식되지 않으므로 기본 키 정의(즉, 전체 행)를 사용하여 정렬됩니다.
암소 비슷한 일종의 영양이 경우 정렬하면 'tab' 값(즉, 값 -t
)이 다중 문자라는 오류가 발생합니다. 이 동작은 더 유용하지만 전통이나 표준에서는 필요하지 않습니다. SunOS-aka-Solaris에서는 유틸리티가 필요하지 않으며 xpg4 또는 xpg6 버전을 지정하지 않는 한 실제로 XPG 및 POSIX와 호환되지 않는 유틸리티가 많습니다. 그렇죠? -- 하지만 현재 가상화된 Solaris 10 테스트 시스템에서는 두 가지 모두 유용한 동작이 /usr/bin/sort
아닙니다 ./usr/xpg4/bin/sort
정말 이 공간을 원하신다면특징공백 문자를 포함하지 않으므로 데이터에 의미가 없는 필드 구분 기호로 다음을 알려야 합니다.껍데기-t
인수의 일부 또는 추가 인수로 공백 문자를 전달합니다.
sort -t" " -k1.1,1.4
sort -t' ' -k1.1,1.4
sort -t\ -k1.1,1.4
sort "-t " -k1.1,1.4
sort '-t ' -k1.1,1.4
sort -t " " -k1.1,1.4
sort -t ' ' -k1.1,1.4
sort -t \ -k1.1,1.4
Unix 유형 시스템(원래 SunOS가 Unix 브랜드인지 여부에 관계없이)에서 "공백"은 일반적으로 단순한 공백 문자 이상을 의미합니다. 일반적으로 최소한 공간이 포함됩니다.및 (가로) 탭LF, VT, FF와 같이 일반적으로 "수직" 공백이 있는 문자입니다. 표준 sort
에서는 필드 구분 기호로 단일 문자만 사용할 수 있으므로 공백을 사용할 수 없습니다. 대조적으로, 쉘과 awk(기본적으로)는 여러 공백 문자를 사용하여 필드를 구문 분석합니다.