Derefter vil jeg substr på denne måde cat fil1.lst | head -$i |tail -1 | awk ' {print substr($0,2,$LEN) } '
Men det er ligesom at det ikke er muligt at læse en variabel fra sin shell i en awk sætning, hvis jeg f.eks bare udskifter $LEN med 20 virker det fint nok
Det har du helt ret i Erik, jeg ville egenligt også hellere lave det i perl, men dette script skal laves i shell da der er så mange andre ting i opgaven der er nemmere at skrive i shell, untaget lige strings håndtering, som jeg så bliver nød til at bruge awk til.
skau > det ved jeg godt det er, men burde det ikke være muligt at bruge sine shell vars inde i awk, de 2 ting har dog alligevel hørt sammen siden 1978. Jeg mener der er en måde at gøre det på, kan bare ikke lige komme på det.
sjovt, har lige opdaget noget: når jeg gør det her SOURCE=`cat fil1.lst | head -$i |tail -1 | awk ' {print substr(\$0,3,$LEN) } '` Bliver SOURCE ikke sat men gør jeg sådan her SOURCE=`cat fil1.lst | head -$i |tail -1 | awk ' {print substr($0,3,50) } '` Bliver den sat.
følgende fejl kommer når jeg anvender linien. LEN=`cat $HOMEDIR/fil1.lst | head -$i |tail -1|awk ' { print length($0) } '` SOURCE=`cat $HOMEDIR/fil1.lst | head -$i |tail -1 | awk " {print substr(\$0,2,$LEN) } "`
awk: syntax error near line 1 awk: illegal statement near line
Hele scriptet ser sådan her ud. Det er korn shell #!/bin/ksh HOMEDIR=/opt/mosaic/shj TARGET_CNT=3 x=0 while [ $x -le $TARGET_CNT ] ; do if [ $x == 0 ] ; then echo her vflges filsystem1 TARGET=/share/mosaic/shjtest TARGETSOURCE=/share/mosaic/autoci/checkinfile elif [ $x == 1 ] ; then echo her vlges filsystem2 TARGET=/share/mosaic/shjtest1 TARGETSOURCE=/share/mosaic/shjtest elif [ $x == 2 ] ; then echo her vlges filsystem 3 TARGET=/share/mosaic/shjtest2 TARGETSOURCE=/share/mosaic/shjtest1 elif [ $x == 3 ] ; then TARGET=/share/mosaic/autoci/checkinfile TARGETSOURCE=/share/mosaic/shjtest2 else echo nu er der ikke flere fi x=`expr $x + 1` cd $TARGETSOURCE find . -name .rsrc -prune -o -type d -print > $HOMEDIR/fil1.lst LINES=`wc -l $HOMEDIR/fil1.lst` i=0 while [ $i -lt $LINES ] ; do i=`expr $i + 1` LEN=`cat $HOMEDIR/fil1.lst | head -$i |tail -1|awk ' { print length($0) } '` SOURCE=`cat $HOMEDIR/fil1.lst | head -$i |tail -1 | awk " {print substr(\$0,2,$LEN) } "` #cat fil1.lst | head -$i |tail -1 | awk ' {print substr($0,3,50) } ' echo dette er sorce: $SOURCE echo Dette er target og source: $TARGET$SOURCE ls "$TARGET$SOURCE" >> /dev/null
if [ $? != 0 ]; then #cd $TARGET mkdir "$TARGET$SOURCE" echo har lavet dir cd /opt/mosaic/shj fi done done
Jeg har iøvrigt lavet et andet script til mirror af directory struktur, der anvender find newer than, det er meget mindre krævende rent performance mæssigt. Men dette script vil jeg bruge til at synkronisere filsystems strukture.
Det er heller ikke bydende nødvendigt, det er bare det jeg kender best syntaxen i. Kan da være jeg skal prøve bash. Det er vist default shell for de fleste linux bokse, det er i hvert fald for min.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.