Perl parece surpreendentemente bom nisso:
Crie um arquivo com 10.000.000 palavras separadas por espaço
for ((i=1; i<=10000000; i++)); do printf "%s " $RANDOM ; done > one.line
Agora, perl para adicionar uma nova linha após cada 1.000 palavras
time perl -pe '
s{
(?:\S+\s+){999} \S+ # 1000 words
\K # then reset start of match
\s+ # and the next bit of whitespace
}
{\n}gx # replace whitespace with newline
' one.line > many.line
Tempo
real 0m1.074s
user 0m0.996s
sys 0m0.076s
verificar resultados
$ wc one.line many.line
0 10000000 56608931 one.line
10000 10000000 56608931 many.line
10000 20000000 113217862 total
A solução awk aceita levou pouco mais de 5 segundos no meu arquivo de entrada.