kongootto

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
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 182729

Url: https://administrator.de/forum/frage-zu-aktion-print-bei-gawk-182729.html

Ausgedruckt am: 01.08.2025 um 22:08 Uhr

Kongootto
Kongootto 29.03.2012 um 15:50:42 Uhr
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