여러 필드의 정렬 명령

여러 필드의 정렬 명령

콘텐츠가 포함된 파일이 있습니다.

192.168.1.3
192.168.1.4
192.168.1.2
10.1.1.1
10.1.1.2
10.1.1.3
192.168.1.56
192.168.1.43
10.1.1.23

내가 줄 때

$ sort -h -t. -k3,4 sort_test.txt 
10.1.1.1
10.1.1.2
192.168.1.2
10.1.1.23
10.1.1.3
192.168.1.3
192.168.1.4
192.168.1.43
192.168.1.56

10.1.1.23이 10.1.1.3보다 먼저 나타나는 이유를 이해할 수 없습니다. 내 생각에는 두 필드가 비교에 사용되므로 두 번째 필드는 동점일 때 사용되며 일반적인 정렬처럼 작동해야 합니다.

답변1

이것은 다음 .23과 같이 정렬됩니다 .3.

$ sort -h -t. -k3,3 -k4,4 sort_test.txt 
10.1.1.1
10.1.1.2
192.168.1.2
10.1.1.3
192.168.1.3
192.168.1.4
10.1.1.23
192.168.1.43
192.168.1.56

답변2

-n이 경우 대체 옵션을 사용하는 것이 좋습니다 -h. 하지만 가장 중요한 점은 -t 매개변수 작업 .의 일부 버전이 다음으로 확장될 수 있다는 것 입니다.sort정규식, 그래서 내가 탈출을 제안할 수 있도록 하기 위해.

sort -nt\. -k3,4 sort_test.txt 

답변3

정렬이 "이상하게" 동작하는 이유 이해

키 3에서 키 4로 정렬하므로 정렬 시 다른 모든 필드는 무시됩니다.

 sort -h -t. -k3,4 sort_test.txt

결과는 다음과 같습니다

10.1.1.1
10.1.1.2
192.168.1.2
10.1.1.23
10.1.1.3
192.168.1.3
192.168.1.4
192.168.1.43
192.168.1.56

결과에서 키 3과 4를 추출하면 192.168.1.3위의 위치가 정렬된 이유가 설명됩니다.10.1.1.3

1.1
1.2
1.2------>192.168.1.2
1.23------> 10.1.1.23
1.3------>10.1.1.3
1.3
1.4
1.43
1.56

따라서 정렬이 왜 이렇게 작동해야 하는지 알 수 있습니다. 키 1에서 4까지 정렬하면 올바른 결과가 제공됩니다.

sort -h -t. -k1,4 sort_test.txt

답변4

-n숫자 비교를 활성화 합니다 . 이 경우 " " -h라고 말하면 부동 소수점(k3 = 1.23 < 1.3) 및 k4 = ""를 얻게 됩니다.k3,4k3

" -V"를 사용하면 동작이 더 좋아집니다. 버전 번호는 1.2 < 1.3 < 1.23입니다.

sort  -t. -k3,4V

에 적용

192.168.10.3
192.168.1.3
192.168.1.4
192.168.1.2
10.1.1.1
10.1.1.2
10.1.1.3
192.168.1.56
192.168.1.43
10.1.1.23
192.168.9.3

반품

10.1.1.1
10.1.1.2
192.168.1.2
10.1.1.3
192.168.1.3
192.168.1.4
10.1.1.23
192.168.1.43
192.168.1.56
192.168.9.3
192.168.10.3

다음 명령을 사용하면 동일한 결과를 얻을 수 있습니다.

sort -t. -k3V
sort -V -t. -k3

관련 정보