Pergunta

Eu tenho um enorme arquivo de texto, cerca de 400.000 linhas 80 charachters amplas sobre liux.

necessidade de "desdobrar" o arquivo, mesclando quatro linhas em um único terminando ter 1/4 das linhas, cada linha 80 * 4 charachters longo.

alguma sugestão?

Foi útil?

Solução

Uma maneira mais fácil de fazê-lo com awk seria:

awk '{ printf $0 } (NR % 4 == 0) { print }' filename

Embora se você queria proteger contra terminando sem uma nova linha à direita fica um pouco mais complicado:

awk '{ printf $0 } (NR % 4 == 0) { print } END { if (NR % 4 != 0) print }' filename

Outras dicas

perl -pe 'chomp if (++$i % 4);'

Espero que eu entendi sua pergunta corretamente. Você tem uma linha de entrada como esta (exceto suas linhas são mais longos):

abcdef
ghijkl
mnopqr
stuvwx
yz0123
456789
ABCDEF

Você quer uma saída como esta:

abcdefghijklmnopqrstuvwx
yz0123456789ABCDEF

O seguinte programa awk deve fazê-lo:

{ line = line $0 }
(NR % 4) == 0 { print line; line = "" }
END { if (line != "") print line }

Execute-o assim:

awk -f merge.awk data.txt
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top