Я пытаюсь запустить три отдельных обработанных при чтении foo.txt

Вот пример:

cat foo.txt | while read line
do
echo line1
echo line2
echo line3
echo ""
done

Ожидаемый результат:

line1
line2
line3

line4
line5
line6

line7
line8

и так продолжается. Это всего лишь пример. Я хочу выполнить некоторые другие команды ...

2 ответа2

2
while true
do
    read line1 || break
    read line2 || break
    read line3 || break
    echo $line1
    echo $line2
    echo $line3
    echo ""
done <foo.txt

Это производит вывод:

line1
line2
line3

line4
line5
line6

line7
line8
line9

Для защитного программирования нам следует разрешить файлы, общее количество строк которых не кратно трем. В этом случае, чтобы убедиться, что каждая строка обрабатывается:

while true
do
    read line1 || break
    echo $line1
    read line2 || break
    echo $line2
    read line3 || break
    echo $line3
    echo ""
done <foo.txt
2
$ awk '1; NR%3==0 { print "" }' foo.txt

То же самое, но на чистом Bash:

NR=0
while read line; do
    echo "$line" 
    (( ++NR % 3 == 0 )) && echo
done < foo.txt

И мне очень интересно, зачем тебе это.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .