Execute um comando para 3 linhas de cada vez

0

Estou tentando executar três processamentos separados enquanto leio foo.txt

Aqui está o exemplo:

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

A saída esperada é:

line1
line2
line3

line4
line5
line6

line7
line8

e continua assim. Este é apenas um exemplo. Eu quero executar alguns outros comandos…

    
por The KingMaker 05.01.2014 / 07:20

2 respostas

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

Isso produz a saída:

line1
line2
line3

line4
line5
line6

line7
line8
line9

Para programar defensivamente, devemos permitir arquivos cujo número total de linhas não seja um múltiplo de três. Nesse caso, para garantir que todas as linhas sejam processadas:

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

A mesma coisa, mas em Bash puro:

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

E eu realmente me pergunto por que você precisa disso.

    
por 06.01.2014 / 04:26