recorrer una lista sin matriz en Shell

recorrer una lista sin matriz en Shell

Estoy intentando escribir un breve script de shell para recorrer una lista (dada por un determinado comando que ejecuto) línea por línea y enviar valores a un archivo CSV.

una lista por ejemplo:

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

Necesito recorrer esto y para cada línea tomar los campos 1.º, 4.º y 6.º en variables para poder manipularlos.

#!/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

El problema aquí es que el bucle for va campo por campo y no línea por línea. Necesito que cada línea entre en $i para poder analizarla con "awk"

Gracias

Respuesta1

Esto se resolvió utilizando el bucle while con IFS que obtiene la variable de filtro como entrada.

No se pudo encontrar el motivo para insertar el comando en el bucle while sin almacenarlo en la variable.

#!/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

información relacionada