kongootto
Goto Top

Frage zu Aktion print bei gawk

Hallo Community,

mein Problem, welches mich verzeifeln, lässt bezieht sich auf die dynamische Auswertung einer .csv Datei durch gawk; anbei der betreffende Code:

INFILE=${L2001HOME}/scripts/fibu/infile_uvnfin.csv

cat $INFILE | while read line; do
        ANZAHL=`echo $line | gawk -F';' '{print NF}'`  #Anzahl der Wörter getrennt durch ; pro Zeile  
        echo $ANZAHL
        for ((i=2; i<=$ANZAHL; i++)); do
                MANDANT=`echo $line | gawk -F';' '{print $i}'` #hier soll immer das i-te Wort pro Zeile ausgegeben werden ausgehende vom 2ten Wort  
                echo $MANDANT
        done
done

Mir gelingt es einfach nicht das print $i beim Durchlauf der Schleife dynamisch mit gawk auszuwerten. Wenn ich print $2 oder $3 setzte habe ich zwar das Ergbenis was ich brauche; allerdings nicht dynmasich da eine Zeile 2..n Wörter enthalten kann.

Nachtrag: Ich habe auch schon sowas wie MANDANT=`echo $line | gawk -F';' '{print $"echo$i"}'` probiert; aber das haut nicht hin. Hat denn keiner eine Idee.


Ich hoffe jemand kann mir bei diesem, vermutlich ganz banalem, Problem helfen.

LG
Kongootto

Content-Key: 182729

Url: https://administrator.de/contentid/182729

Printed on: April 16, 2024 at 11:04 o'clock

Member: Kongootto
Kongootto Mar 29, 2012 at 13:50:42 (UTC)
Goto Top
Hallo,

hier nochmal der Verfasser: habe das Problem mitlerweile selbst gelöst: man kann gawk durch den Paramter -v eine Variable mitgeben; sieht dann in etwas so aus:

cat $INFILE | while read line; do
        MANDANT=`echo $line | gawk -F';' '{print $1}'` #Mandantennummer der zu kopierenden Datei  
        echo "Verteilen der Buchungslisten für Mandant $MANDANT:" >> $PROTO  

        #echo $line | gawk -F';' '{ for(i=2;i<=NF;i++)  print $i}' 
        ZAEHLER=2 # die Listenverzeichnisse beginnen ab Spalte 2
        SPALTEN=`echo $line | gawk -F';' '{print NF}'` #Anzahl der Spalten  
        while [ $ZAEHLER -le $SPALTEN ]; do #durchlaufen aller Spalten pro Zeile beginnend ab der 2ten
                LISTENVERZ=`echo $line | gawk -v PARAM="$ZAEHLER" -F';' '{print $PARAM}'` #Listernverzeichnis der aktuellen Spalte  
                #echo $LISTENVERZ
                find -maxdepth 1 -type f  -name "*$MANDANT*"  -exec cp -v  \{\} /mnt/loga_app/listen/$LISTENVERZ/UVNFIN 1>>$PROTO 2>&1 \;  
                ZAEHLER=$[$ZAEHLER+1]
        done
        echo "" >> $PROTO  
done

Ist zwar nicht besonders schön aber funktioniert.

Falls jemand eine Idee hat wie man die ganze Funktionalität in awk abbildet, kann er sich ja nochmal melden.

Gruß
Kongootto