Frage

Ich habe eine große Text-Datei, ca. 400.000 Zeilen 80 charachters breit auf liux.

Sie benötigen, um die Datei „entfalten“, die Fusion von vier Linien in eine mit 1/4 der Linien enden, jede Zeile 80 * 4 charachters lang.

irgendwelche Vorschläge?

War es hilfreich?

Lösung

Ein einfacher Weg, um es mit awk zu tun sei:

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

Obwohl, wenn man will gegen schützen, ohne einen Newline enden wird es ein wenig komplizierter:

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

Andere Tipps

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

Ich hoffe, dass ich Ihre Frage richtig verstanden. Sie haben eine Eingabezeile wie folgt aus (außer Ihre Linien sind länger):

abcdef
ghijkl
mnopqr
stuvwx
yz0123
456789
ABCDEF

Sie möchten Ausgabe wie folgt:

abcdefghijklmnopqrstuvwx
yz0123456789ABCDEF

Das folgende awk-Programm sollte es tun:

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

Starten Sie es wie folgt aus:

awk -f merge.awk data.txt
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top