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 など、さまざまなクラスのものである可能性があることに注意してください。