Domanda

Ho un file di testo enorme, circa 400.000 linee di 80 charachters su Liux.

Hai bisogno di "spiegare" il file, la fusione di quattro linee in una sola finendo con 1/4 delle linee, ogni linea lungo 80 * 4 charachters.

qualche suggerimento?

È stato utile?

Soluzione

Un modo più semplice per farlo con awk sarebbe:

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

Anche se si voleva proteggere finire senza un newline finale diventa un po 'più complicato:

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

Altri suggerimenti

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

Spero ho capito bene la tua domanda. Hai una linea di ingresso come questo (tranne le linee sono più lunghi):

abcdef
ghijkl
mnopqr
stuvwx
yz0123
456789
ABCDEF

Si desidera output come questo:

abcdefghijklmnopqrstuvwx
yz0123456789ABCDEF

Il seguente programma awk dovrebbe farlo:

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

Esegui in questo modo:

awk -f merge.awk data.txt
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top