Leerzeile entfernen


chocox

Mitglied
Hallo zusammen,

ich habe eine Datei, in der folgendes steht;

Start
Dokument 1
Dokument 2
Dokument 3
Start
Dokument 1
Dokument 2
Start
usw.......

Ich möchte mit einem Perl-Skript folgende Ausgabe erzielen;
Start Dokument 1 Dokument 2 Dokument 3
Start Dokument 1

Auf Shell-Ebene konnte ich das Problem lösen, nur läuft es bei großen Dateien sehr lange.
Mit Perl hatte ich bisher noch keine Erfahrung sammeln können.

Ich hoffe ihr könnt mir einen Tipp geben!? :)

Vielen Dank
 

chocox

Mitglied
Also in shell sieht meine Lösung so aus;

for l in `cat test.txt`; do if [ `echo $l | grep "Start" | wc -l` -gt 0 ]; then echo $a; a="$l"; else a="$a; $l"; fi; done; echo $a

In Perl habe ich rumprobiert und bin bis jetzt bei

perl -pi.orig -e 'undef $/;while(s/\n((Start).*?\n)/$1/g) {}' test.txt

Aber das haut noch nicht so ganz hin...es hängt mir das Start-Zeichen hinter Dokument 1
Dokument 1 Start
Dokument 2
Dokument 1 Start usw.

****
 
Hallo chocox,

probier es mal mit folgendem sed-Schnipsel:
Bash:
sed -n -e '/^Start$/{x;s/\n/ /gp;d;x};H;${x;s/\n/ /gp}' test.txt

Beispiel:
Code:
reima@marvin:/tmp$ cat test.txt 
Start
Dokument 1
Dokument 2
Dokument 3
Start
Dokument 4
Dokument 5
reima@marvin:/tmp$ sed -n -e '/^Start$/{x;s/\n/ /gp;d;x};H;${x;s/\n/ /gp}' test.txt 
Start Dokument 1 Dokument 2 Dokument 3
Start Dokument 4 Dokument 5

Grüße,
Matthias