제목의 두 가지 예는 매우 다른 결과를 낳습니다. 첫 번째 항목( sort -k2,2 -nk6,6 foo
)은 다음 결과를 반환합니다.
153759 townhome 900 2 1 79000
876543 townhome 745 2 1 79000
222999 townhome 850 2 2 83333
759153 condo 850 2 1.5 85000
453215 townhome 1000 3 1.5 86000
646484 condo 890 3 1 93333
444555 condo 930 2 1 99999
등.
두 번째( sort -k2,2 -k6,6n foo
)는 다음을 반환합니다.
759153 condo 850 2 1.5 85000
646484 condo 890 3 1 93333
444555 condo 930 2 1 99999
777894 condo 790 3 1 101000
221155 condo 1030 3 1 109500
248624 duplex 1250 3 1 120000
987654 duplex 1100 3 1.5 140000
이것이 내가 찾고 있는 올바른 결과입니다.
이 차이의 원인은 무엇입니까?
답변1
~처럼마이크 셀프 라고, 그러나 더 많은 단어는 다음과 같습니다.
"전역" -n
숫자 정렬 옵션을 사용하면 모든 키에 대해 숫자 정렬을 사용하도록 정렬의 전역 동작이 변경됩니다(인용하다) gkey.numeric을 설정한 다음 설정하여각 키의 설정전역적으로 설정된 숫자 정렬 옵션에 대한 정렬 옵션입니다. 이로 인해 필드 2의 정렬이 실패하므로 대신 필드 6이 정렬(숫자)됩니다.
설정n
주문 옵션내부적으로 이 옵션은 -k
이 필드의 정렬에만 영향을 미치므로 필드 2가 고유하지 않을 때까지 정렬한 다음 필드 6을 숫자로 정렬합니다.
첫 번째 정렬된 예제에서 "이중" 줄을 찾을 수 없었기 때문에 모든 예제 줄을 고유하게 결합하여 새 예제 입력 파일을 만들었습니다.
153759 townhome 900 2 1 79000
221155 condo 1030 3 1 109500
222999 townhome 850 2 2 83333
248624 duplex 1250 3 1 120000
444555 condo 930 2 1 99999
453215 townhome 1000 3 1.5 86000
646484 condo 890 3 1 93333
759153 condo 850 2 1.5 85000
777894 condo 790 3 1 101000
876543 townhome 745 2 1 79000
987654 duplex 1100 3 1.5 140000
...플래그를 사용하여 정렬 동작을 보여줄 수 있습니다 --debug
. "일치 없음" 경고와 정렬에 사용되는 행 부분을 나타내는 6번째 필드의 밑줄을 참고하세요.
$ sort -k2,2 -nk6,6 --debug < input
sort: using ‘en_US.UTF-8’ sorting rules
153759 townhome 900 2 1 79000
^ no match for key
_____
_____________________________
876543 townhome 745 2 1 79000
^ no match for key
_____
_____________________________
222999 townhome 850 2 2 83333
^ no match for key
_____
_____________________________
759153 condo 850 2 1.5 85000
^ no match for key
_____
____________________________
453215 townhome 1000 3 1.5 86000
^ no match for key
_____
________________________________
646484 condo 890 3 1 93333
^ no match for key
_____
__________________________
444555 condo 930 2 1 99999
^ no match for key
_____
__________________________
777894 condo 790 3 1 101000
^ no match for key
______
___________________________
221155 condo 1030 3 1 109500
^ no match for key
______
____________________________
248624 duplex 1250 3 1 120000
^ no match for key
______
_____________________________
987654 duplex 1100 3 1.5 140000
^ no match for key
______
_______________________________
비교:
$ sort -k2,2 -k6,6n --debug < input
sort: using ‘en_US.UTF-8’ sorting rules
sort: leading blanks are significant in key 1; consider also specifying 'b'
759153 condo 850 2 1.5 85000
______
_____
____________________________
646484 condo 890 3 1 93333
______
_____
__________________________
444555 condo 930 2 1 99999
______
_____
__________________________
777894 condo 790 3 1 101000
______
______
___________________________
221155 condo 1030 3 1 109500
______
______
____________________________
248624 duplex 1250 3 1 120000
_______
______
_____________________________
987654 duplex 1100 3 1.5 140000
_______
______
_______________________________
153759 townhome 900 2 1 79000
_________
_____
_____________________________
876543 townhome 745 2 1 79000
_________
_____
_____________________________
222999 townhome 850 2 2 83333
_________
_____
_____________________________
453215 townhome 1000 3 1.5 86000
_________
_____
________________________________