percorrer uma lista sem array no shell

percorrer uma lista sem array no shell

Estou tentando escrever um script de shell curto para percorrer uma lista (fornecida por um determinado comando que executo) linha por linha e enviar valores para o arquivo CSV

uma lista por exemplo:

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

Preciso fazer um loop através disso e, para cada linha, transformar o primeiro, o quarto e o sexto campos em variáveis ​​para que eu possa fazer alguma manipulação neles.

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

o problema aqui é que o loop for vai campo por campo e não linha por linha. preciso que cada linha entre em $i para que eu possa analisá-la com "awk"

Obrigado

Responder1

Isso foi resolvido usando o loop while com IFS que obtém a variável de filtro como entrada.

Não foi possível encontrar um motivo para enviar o comando para o loop while sem armazená-lo na variável.

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

informação relacionada