콘텐츠가 포함된 파일이 있습니다.
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,4
k3
" -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