전체 행을 유지하면서 IP 주소를 선택하고 정렬합니다.

전체 행을 유지하면서 IP 주소를 선택하고 정렬합니다.

따라서 IP 주소를 정렬한 다음 이를 기준으로 행을 정렬해야 합니다.

다음을 사용하여 파일의 IP 주소를 정렬할 수 있습니다.sort -n -t . -k1,1 -k2,2 -k 3,3 -k4,4

내 파일이 다음과 같은 경우:

    add method1 a.b.c.d other thing
    add method2 e.f.g.h other thing2
    add method2 a.b.c.d other thing2
    add method5 j.k.l.m other thing5
    add method3 a.b.c.d other thing3
    add method1 e.f.g.h other thing2

하지만 이 경우 필드 1은 다음과 같습니다.

    add method1 a
    add method2 e
    add method2 a
    add method5 j
    add method3 a
    add method1 e

필드 4는 다음과 같습니다.

    d other thing
    h other thing2
    d other thing2
    m other thing5
    d other thing3
    h other thing2

내 IP 주소를 정렬한 다음 이를 기반으로 내 라인을 정렬하려면 어떻게, 어떤 도구를 사용해야 합니까? 미리 감사드립니다.

편집: 예가 수정되었습니다. IP 주소는 동일하지만 텍스트가 다르고 순서가 무작위인 여러 줄이 있습니다.

답변1

답변이 늦었지만 누군가에게 도움이 될 수 있습니다. GNU 정렬의 최신 버전이 있는 경우(GNU 코어 유틸리티 7.0이상)을 사용할 수 있습니다.--version-sort(또는 -V) 옵션을 선택하면 IPv4 주소에 대해 올바른 작업이 수행됩니다. 입력을 가정하면:

add method1 10.1.2.3 other thing
add method2 10.10.20.30 other thing2
add method2 10.1.2.3 other thing2
add method5 10.2.8.9 other thing5
add method3 10.1.2.3 other thing3
add method1 10.10.20.30 other thing2

이를 실행하면 다음 sort -k 3 -V이 생성됩니다.

add method1 10.1.2.3 other thing
add method2 10.1.2.3 other thing2
add method3 10.1.2.3 other thing3
add method5 10.2.8.9 other thing5
add method1 10.10.20.30 other thing2
add method2 10.10.20.30 other thing2

답변2

스크립트는 awk를 사용하여 필드 3의 IP 주소를 "%" 구분 기호가 있는 줄의 시작 부분에 복사한 다음 첫 번째 필드의 IP 주소를 정렬하고 추가된 부분을 제거합니다.

awk '{print $3 " % " $0}' |
sort -t. -n -k1,1 -k2,2 -k3,3 -k4,4 |
sed 's/[^%]*% //'

IP 주소가 포함된 필드가 일정하지 않은 경우 각 줄에서 자동으로 감지할 수 있습니다. 위의 awk를 다음으로 바꾸세요.

awk '{ for(i=1;i<=NF;i++)
         if($i~/^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$/)break;
       print $i " % " $0
     }' |

답변3

-t이는 예상된 현상입니다. 이 옵션( man sort:field 구분 기호) 을 이해했는지 확인하세요 . 사용하려는 명령에는 다음이 포함됩니다.분명히IP 주소만.

빠르고 더러운 해결책은 파일의 공백을 먼저 점으로 변환 .한 다음 정렬하는 것입니다(나중에 IP 주소를 제외하고 변환을 실행 취소할 수 있음).

sed -i.bak 's/ /./g' data.log
sort -n -t . -k2,2 -k3,3 -k4,4 -k5,5 data.log

색인을 옮겼습니다. 시도 해봐.

관련 정보