bash script & array - ukázka řešení
Marian Cavojsky
cavojsky na soria-grey.sk
Úterý Leden 18 22:32:25 CET 2005
On Tue, Jan 18, 2005 at 10:15:59AM +0100, Miroslav BENES wrote:
>
> >A co tak usporiadat a vypisat vsetky cisla madzi dvoma prvkami
> >usporiadanej mnoziny (suboru) ip adries.
> >
> >
> No sice jsem to zkoušel vyřešit tímto Vámi navrhovaným způsobem, ale
> napoprvé to nedopadlo úplně dobře (vstupní soubor je uspořádaný, což
> ulehčuje situaci) :
>
> IP=0
> cat $ARCHIV_MERGE |\
> sed -e 's/\./\ /g' |\
> awk '{printf("%d\n",$4)}' |\
> while read IP_ZIVA ;
> do
> for (( IP_MRTVA=$IP ; $IP_MRTVA < $IP_ZIVA ; IP_MRTVA += 1 )) ;
> do
> echo "volno : $ZAKLAD$PODSIT.$IP_MRTVA"
> done
> IP=$((IP_ZIVA + 1))
> done
>
>
> Vypisuje to hezky, ale chyba se objeví na konci. Pokud jsou mezi
> "živými" IP adresami 247 a 250, vypíše se v posledním cyklu interval
> mezi nimi (248,249) - což je správně - ale už to nepokračuje dál a
> nevypíšou se další volné (251..255).
>
Pre zjednodusenost (nechcelo sa mi generovat si subor s ip adresami)
subor cisla.txt:
34
56
123
245
a script:
( read LAST ; for (( IP=1 ; $IP < 255 ; IP += 1 )) ; do if [ "$LAST" == "$IP" ] ; then read LAST ; else echo $IP ; fi ; done ) < cisla.txt
Dalej:
sed -e 's/\./\ /g' |\
awk '{printf("%d\n",$4)}'
sa da nahradit:
awk -F '.' '{print $4}'
--
Marian Cavojsky <cavojsky @ soria-grey.sk>
Spravca siete, Soria & Grey s.r.o, reklamna agentura
Další informace o konferenci Linux