sort는 1 10 11 12.. 2 20 대신 1 2 3 4..9를 정렬할 수 있습니다.

sort는 1 10 11 12.. 2 20 대신 1 2 3 4..9를 정렬할 수 있습니다.

이 스크립트를 사용하여 온라인에서 IP를 검색합니다.

#!/bin/sh
set -e

# no args
if [ $# -lt 1 ]; then
    echo "Too few args"
    echo "Options are:"
    echo "-a: Tell me which host is online"
    echo "-b: show only list of ip found"
    exit 1
fi

# too many args
if [ $# -gt 1 ]; then
    echo "$1 option unknown"
    echo "Options are:"
    echo "-a: Tell me which host is online"
    echo "-b: show only list of ip found"
    exit 1
fi



case $1 in
-a)
array1=(
`nmap -sP 192.168.0.0/24 | awk '/is up/ {print up}; {gsub (/\(|\)/,""); up = $NF}'`
)
for i in ${array1[@]};do echo "Ip $i is online";done
;;
-b)
nmap -sP 192.168.0.0/24 | awk '/is up/ {print up}; {gsub (/\(|\)/,""); up = $NF}'|sort -fn
;;
*)
    echo "$1 option unknown"
    echo "Options are:"
    echo "-a: Tell me which host is online"
    echo "-b: show only list of ip found"
;;
esac

그러나 -b를 사용하면 다음과 같은 목록이 반환됩니다.

192.168.0.1
192.168.0.11
192.168.0.14
192.168.0.15
192.168.0.17
192.168.0.2
192.168.0.3
192.168.0.44
192.168.0.46
192.168.0.49
192.168.0.50

목록을 이렇게 정렬하고 싶습니다.

    192.168.0.1
    192.168.0.2
    192.168.0.3
    192.168.0.11
    192.168.0.14
    192.168.0.15
    192.168.0.22
    192.168.0.44
    192.168.0.46
    192.168.0.49
    192.168.0.50

정렬에 대한 제안 사항이 있습니까?

답변1

sort.구분된 네 번째 필드만을 기준으로 합니다.

... | sort -t. -k4,4n
  • -t.입력 필드 구분 기호를 다음으로 설정하십시오..

  • - -k4,4n4번째 필드만을 기준으로 파일을 정렬하고 n숫자 정렬을 구현합니다 .

예:

$ cat file.txt
192.168.0.1
192.168.0.11
192.168.0.14
192.168.0.15
192.168.0.17
192.168.0.2
192.168.0.3
192.168.0.44
192.168.0.46
192.168.0.49
192.168.0.50

$ sort -t. -k4,4n file.txt
192.168.0.1
192.168.0.2
192.168.0.3
192.168.0.11
192.168.0.14
192.168.0.15
192.168.0.17
192.168.0.44
192.168.0.46
192.168.0.49
192.168.0.50

관련 정보