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