다음 예제 데이터의 경우 두 열 모두 숫자이지만 두 번째 열의 자릿수가 다릅니다.
2 9
1 1000
1 50
3 0
두 개의 열을 기준으로 정렬하고 싶습니다. 숫자 플래그를 사용하여 개별적으로 지정하면 -n
원하는 결과가 생성됩니다.
sort -n -k1,1 -k2,2 num.data.txt
주어진
1 50
1 1000
2 9
3 0
이것이 내가 원하는거야.
하지만,
sort -n -k1,2 num.data.txt
알파벳순으로 정렬된 것으로 보이는 데이터가 있는 경우:
1 1000
1 50
2 9
3 0
이는 두 개의 열만 있는 것과 동일하다는 것을 알고 있지만 sort -n -k1,2 num.data.txt
(동일한 결과 제공) 실제로 작업 중인 데이터에는 더 많은 열이 있습니다.sort -n num.data.txt
두 방법 사이에 왜 이러한 차이가 있습니까?
답변1
주요 -k1,2
사양 지정하나키는 첫 번째 열의 시작 부분에서 시작하고(기본 열 구분 기호는 공백이 아닌 공백에서 공백으로의 전환이기 때문에 선행 공백 포함) 두 번째 열의 끝에서 끝납니다.
이것이 단지 것임을 깨닫는 것이 중요하다하나열쇠. 두 개의 키가 필요한 경우 두 가지 -k
옵션이 필요합니다. 정렬할 때 문자열은 숫자 와 비교 sort
됩니다 . 숫자 비교의 경우 이러한 문자열은 유효한 숫자처럼 보이는 선행 부분을 고려하여 숫자로 변환됩니다(선행 공백은 무시됩니다). 그래서 우리는 과 를 비교할 것입니다 . 동일하므로 대체 정렬을 되돌려 전체 행의 어휘 비교인 관계를 결정합니다."1 50"
"1 1000"
1
1
sort
와 비교한 -n -k1,1 -k2,2
다음 동점 이므로 두 번째 키( vs )를 고려합니다. 이는 숫자 정렬 ( 첫 번째 필드에서 시작하여 행 끝에서 끝나는 키를 지정하는 경우 전체 행과 동일) 이기 때문에 작동합니다 .sort
"1"
"1"
" 50"
" 1000"
-n -k1 -k2
-k1