Como você não solicitou uma solução 100% awk
,
Eu vou oferecer um híbrido que (a) pode, sem dúvida, ser mais fácil de entender,
e (b) não enfatiza os limites de memória de awk
:
awk '
$1 == 2 { secondpart = 1 }
{ if (!secondpart) {
print > "top"
} else {
print $1, $2 > "left"
print $5, $6, $7, $8, $9 > "right"
}
}' a
(cat top; paste -d" " left b c right) > new_a
rm top left right
Ou podemos eliminar um dos arquivos temporários e encurtar o script por um comando:
(awk '
$1 == 2 { secondpart = 1 }
{ if (!secondpart) {
print
} else {
print $1, $2 > "left"
print $5, $6, $7, $8, $9 > "right"
}
}' a; paste -d" " left b c right) > new_a
rm left right
Isto irá colocar alguns espaços extras nas extremidades das linhas da saída,
e perderá dados do arquivo a
se qualquer linha tiver mais de nove campos (colunas).
Se esses são problemas, eles podem ser corrigidos facilmente.