loop de script de shell através da lista linha por linha

loop de script de shell através da lista linha por linha

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

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"

Responder1

Esse problema foi resolvido usando o loop while com IFS. Saída do comando armazenada na variável ($filter) e lida linha por linha pelo loop. Não consegui encontrar uma maneira de enviar o comando diretamente para o loop sem variável (acredito que isso não é suportado apenas pelo shell bash)

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