Durchlaufen einer Liste ohne Array in der Shell

Durchlaufen einer Liste ohne Array in der Shell

Ich versuche, ein kurzes Shell-Skript zu schreiben, um eine Liste (angegeben durch einen bestimmten Befehl, den ich ausführe) Zeile für Zeile zu durchlaufen und Werte in eine CSV-Datei zu übertragen

eine Liste zum Beispiel:

aaa   bbb   ccc   ddd   eee   fff
jjj   kkk   lll   mmm   nnn   ooo
uuu   vvv   www   xxx   yyy   zzz

Ich muss dies durchlaufen und für jede Zeile das 1., 4. und 6. Feld in Variablen übernehmen, damit ich sie bearbeiten kann.

#!/bin/sh
#
CSVfile="/tmp/`hostname`.csv"
filter=$( command )
touch $CSVfile
#
for i in $filter
do 

    first=$( printf "$i" | awk {'print$1'})
    fourth=$( printf "$i" | awk {'print$4'})
    sixth=$( printf "$i" | awk {'print$6'})
    cmd=$( cat /home/app/$first/$fourth/out | grep value | awk -F: {'print$2'})
    echo `date +%d%m%Y,%H%M%S`,"$sixth","$cmd" >> $CSVfile

done

das Problem hier ist, dass die For-Schleife Feld für Feld und nicht Zeile für Zeile durchgeht. Jede Zeile muss in $i eingehen, damit ich sie mit „awk“ analysieren kann.

Danke

Antwort1

Dies wurde durch die Verwendung einer While-Schleife mit IFS gelöst, die die Filtervariable als Eingabe erhält.

Es konnte kein Grund gefunden werden, den Befehl in eine While-Schleife zu setzen, ohne ihn in einer Variablen zu speichern.

#!/bin/sh
#
CSVfile="/tmp/`hostname`.csv"
filter=$( command )
touch $CSVfile
#
while IFS= read -r line
do
    first=$( printf "$i" | awk {'print$1'})
    fourth=$( printf "$i" | awk {'print$4'})
    sixth=$( printf "$i" | awk {'print$6'})
    cmd=$( cat /home/app/$first/$fourth/out | grep value | awk -F: {'print$2'})
    echo `date +%d%m%Y,%H%M%S`,"$sixth","$cmd" >> $CSVfile

done < $filter

verwandte Informationen