숫자 옵션을 사용할 때의 정렬 동작: "sort -k2,2 -nk6,6 foo" 대 "sort -k2,2 -k6,6n foo"

숫자 옵션을 사용할 때의 정렬 동작: "sort -k2,2 -nk6,6 foo" 대 "sort -k2,2 -k6,6n foo"

제목의 두 가지 예는 매우 다른 결과를 낳습니다. 첫 번째 항목( 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
      _________
                           _____
________________________________

관련 정보