Виконайте команду по 3 рядки одночасно


0

Я намагаюся запустити три окремі оброблені під час читання 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

і продовжує так. Це лише приклад. Я хочу виконати деякі інші команди ...


Перевірте форматування. Формат коду для вашої публікації використовується по всьому світу. Також допоможе, якщо ви показали якийсь реальний приклад, а не щось надумане.
slhck

Поясніть, будь ласка, що ви насправді хочете зробити. Ви хочете розділити файл на групи з трьох рядків і виконати різні команди в 1-му 2-му та 3-му рядках кожної групи?
тердон

Відповіді:


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

Я думаю, що ви повинні поставити ехо відразу після прочитаного, інакше, якщо line1 буде прочитано, а line2 ні, ехо $ line1 не буде виконано
Еран Бен-Натан

@ EranBen-Natan Гарна пропозиція. Відповідь оновлено.
John1024

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

І мені дуже цікаво, навіщо вам це потрібно.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.