0

IP を持つ 2 つのアレイがあります。それらを 3 番目の配列に結合し、昇順を適用したいと考えています。

#!/bin/bash
#

dbip[0]=1.1.1.1
dbip[1]=1.1.1.2
dbip[2]=1.1.1.3
dbip[3]=1.1.1.4
dbip[4]=1.1.1.5
dbip[5]=1.1.1.10
dbip[6]=1.1.1.9

ngip[0]=1.1.1.5
ngip[1]=1.1.1.6
ngip[2]=1.1.1.7
ngip[3]=1.1.1.1
ngip[4]=1.1.1.11


#I am adding the dbip array into the final one
for (( i=0; i<${#dbip[@]}; i++ ))
do
        allip[$i]=${dbip[$i]}
done

#Remembering the no. of elements in the final array
var=${#allip[@]}
echo "$var"

#Adding the ngip array into the final one
for (( i=0; i<${#ngip[@]}; i++ ))
do
        allip[$var+$i]=${ngip[$i]}
done

#Printing the initial order of the elements in the array
echo "size= ${#allip[@]}"

for (( i=0; i<${#allip[@]}; i++ ))
do
        echo "${allip[$i]}"
done

#Sorting the array in ascending order
for (( i=0; i<${#allip[@]}; i++ ))
do
        for (( j=$i; j<${#allip[@]}; j++ ))
        do
                if [ allip[$i] \> allip[$j] ];
                then
                        aux=${allip[$i]}
                        allip[$i]=${allip[$j]}
                        allip[$j]=$aux;
                fi
        done
done

echo "###############################"

#Printing the final form of the array
for (( i=0; i<${#allip[@]}; i++ ))
do
        echo "${allip[$i]}"
done

問題は、出力が数値または辞書式に順序付けられていないことです。

出力:

1.1.1.1
1.1.1.11
1.1.1.1
1.1.1.2
1.1.1.3
1.1.1.4
1.1.1.5
1.1.1.10
1.1.1.9
1.1.1.5
1.1.1.7
1.1.1.6

出力は次のようになります。

1.1.1.1
1.1.1.1
1.1.1.2
1.1.1.3
.......
1.1.1.10
1.1.1.11

またはこのように

1.1.1.1
1.1.1.1
1.1.1.10
1.1.1.11

後で重複を削除できるようにします。

bashで純粋なプログラミング方法でこれを行うにはどうすればよいですか。パイプはありません。

IP は、10.55.72.190、10.55.70.1、10.51.72.44 など、さまざまなクラスのものである可能性があることに注意してください。

4

2 に答える 2