doppelte Zeilen entfernen, aber nur bis zum ersten Semikolon checken

15/11/2012 - 12:58 von Astrid | Report spam
Hallo zusammen,

verwende
perl -ne 'unless($h{$_}){$h{$_}=1; print}' -i $1
um doppelte Zeilen aus einer Datei zu entfernen. Klappt soweit auch
bisher prima.
Jetzt ist aber eine neue Sorte von Dateien hinzugekommen, wo zur
vorhergehenden
Zeile nur bis zum ersten Semikolon gecheckt werden soll, ob die
identisch sind.

1.2;3.0006;3.4
1.2;3.0005;3.4
1.3;3.1234;4.2
1.4;3.4567;4.5

soll ergeben

1.2;3.0006;3.4
1.3;3.1234;4.2
1.4;3.4567;4.5

Die 2. Zeile fliegt raus, weil sie mit 1.2 anfaengt, wie es
Zeile 1 auch schon tat.

Kann man den so schoen kurzen Befehl von oben entsprechend umstricken?

Gruss, Astrid
 

Lesen sie die antworten

#1 K. Wittrock
15/11/2012 - 15:44 | Warnen spam
Astrid schrieb am 15.11.2012 :
Hallo zusammen,

verwende
perl -ne 'unless($h{$_}){$h{$_}=1; print}' -i $1
um doppelte Zeilen aus einer Datei zu entfernen. Klappt soweit auch
bisher prima.
Jetzt ist aber eine neue Sorte von Dateien hinzugekommen, wo zur
vorhergehenden
Zeile nur bis zum ersten Semikolon gecheckt werden soll, ob die
identisch sind.

1.2;3.0006;3.4
1.2;3.0005;3.4
1.3;3.1234;4.2
1.4;3.4567;4.5

soll ergeben

1.2;3.0006;3.4
1.3;3.1234;4.2
1.4;3.4567;4.5

Die 2. Zeile fliegt raus, weil sie mit 1.2 anfaengt, wie es
Zeile 1 auch schon tat.

Kann man den so schoen kurzen Befehl von oben entsprechend umstricken?



Da mein Linux nicht mehr lauffàhig ist, musste ich deinen Einzeiler
erst mal für Windows umbauen. So klappt's:
perl -ne "unless($h{$_}){$h{$_}=1; print}" -i.org doppzeile.txt
Und nun eine Lösung für deine Aufgabe:
perl -ne "($head)=/(.+?;)/;unless($h{$head}){$h{$head}=1; print}"
-i.org doppzeile.txt
HTH.

Gruß

Klaus

Meine Email-Adr. lautet
K<ohne_Punkt_und_Komma>Wittrock<Klammeraffe>web.de

Ähnliche fragen