
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