цикл сценария оболочки по списку строка за строкой

цикл сценария оболочки по списку строка за строкой

Я пытаюсь написать короткий скрипт оболочки для построчного перебора списка (заданного определенной запущенной мной командой) и сохранения значений в CSV-файл.

список например:

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

Нужно выполнить цикл и для каждой строки взять 1-е, 4-е и 6-е поля в переменные, чтобы можно было выполнить с ними некоторые манипуляции.

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

Проблема здесь в том, что цикл for проходит поле за полем, а не строка за строкой. Нужно, чтобы каждая строка помещалась в $i, чтобы я мог проанализировать ее с помощью «awk».

решение1

Эта проблема была решена с помощью цикла while с IFS. Вывод команды сохраняется в переменной ($filter) и считывается построчно циклом. Я не смог найти способ отправить команду напрямую в цикл без переменной (я думаю, что это не поддерживается только оболочкой 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

Связанный контент