awk -v RS= -F '\n' '
{for (i = 1; i <= NF; i++) a[NR,i] = $i}
NF > max {max = NF}
NR == 3 {exit}
END{
for (i = 1; i <= max; i++)
printf "ADD %s in %s to get %s\n", a[1,i], a[2,i], a[3,i]
}' < input
Com RS=
, esse é o modo de parágrafo , onde os registros são parágrafos. perl
tem um recurso semelhante com a opção -00
(não confundir com -0
). Usamos newline como um separador de campo, então cada campo é uma linha desse parágrafo. Você pode deixar de fora o -F '\n'
se você preferir que os campos sejam cada palavra desses parágrafos.
Se você quiser que as strings sejam geradas por um shell que esteja expandindo ADD $a in $b to get $c
, então você ainda pode ter awk
colocando-as em uma ordem mais útil e pós-processá-las com o shell:
< input awk -v RS= -F '\n' '
{for (i = 1; i <= NF; i++) a[NR,i] = $i}
NF > max {max = NF}
NR == 3 {exit}
END{
for (i = 1; i <= max; i++) for (j = 1; j <= NR; j++)
print a[j,i]
}' |
while
IFS= read -r a &&
IFS= read -r b &&
IFS= read -r c
do
printf '%s\n' "ADD $a in $b to get $c"
done