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.区切られた4番目のフィールドのみに基づいています。

... | 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

関連情報