script de shell recorre la lista línea por línea

script de shell recorre la lista línea por línea

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.

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"

Respuesta1

Este problema se resolvió utilizando el bucle while con IFS. Salida del comando almacenada en la variable ($filter) y leída línea por línea por el bucle. No pude encontrar una manera de enviar el comando directamente al bucle sin variable (creo que esto no es compatible con bash únicamente de shell)

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