2 gleiche Zeilen in 2 Dateien löschen

C

calomatic

Mitglied
Hallo!

ich habe 2 Dateien:

1. Datei:
abc
abcd

2. Datei:
dskl
abc
jkll
abcd

Ich möchte nun die Zeilen aus Datei 2, die schon in Datei 1 vorhanden sind, löschen.

Code:
cat datei2 | while read input_datei2;
    do	
	grep "$input_datei2" datei1
	if [ $? = 1 ]; then
	    echo "$input_datei2" >> new_datei2
	fi
    done

Das funktioniert bei mir nicht, die new_datei2 ist genauso groß wie datei2 .. sprich es wurden keine Zeilen entfernt. Ich wollte mit dem Skript nur die Zeilen weiterleiten die in datei1 nicht gefunden wurden.

MfG Sascha
 
nur so ein gedanke:
warum machst du nicht ein diff mit den beiden dateien und leitest alle zeilen die nicht in beiden gleich sind in ein neues file um?

das ist das gleiche wie doppelte zeilen zu entfernen nur das es schneller geht.
 
ok probier ich mal! :)

Code:
diff datei1 datei2 > new_datei2

ah ok .. das funktioniert! Danke.

Kann man da auch die Formatierung ausstellen?

der Code von oben bringt mir:

Code:
0a1
> dskl
1a3
> jkll

Ich möchte aber nur die Zeilen die nicht in datei1 vorkommen .. ohne den Schnick Schnack. ;)
 
Zuletzt bearbeitet:
Das gab's hier schonmal. Die Antwort:
Code:
fgrep -v datei1 datei2 > new_datei2
 
Danke, habe mir mal man fgrep angeguckt und das müsste eigentlich funktionieren! Aber new_datei2 hat genau den selben Inhalt wie datei2 wie kann das sein? :think:
 
Ja! Das ist es. Warum bin ich da nicht selber drauf gekommen.

Danke! :D
 
ninguno schrieb:
vielleicht so?
Code:
grep -vf datei1 datei2
Jo, meine Schuld. Ich dachte, fgrep sei ein Synonym fuer 'grep -f', ist aber eins fuer 'grep -F'.

Code:
grep -vf datei1 datei2
sollte also funktionieren,wie ninguno schon meinte, solange datei1 keine Leerzeile enthaelt
 
Ah, wieso das? Warum kommt es mit leeren Zeilen nicht klar?

Mist, mit den beiden Testdateien funktioniert das wunderbar .. aber mit meinen richtigen Dateien wo die Einträge so aussehen:

Code:
...
127.0.0.1 - - [2006/Mar/22:05:51:06 +0100] "GET /Datei" 403 34
...

leider nicht. Wahrscheinlich muss ich dann wieder alle Sonderzeichen auskommentieren. ;(
 
Zuletzt bearbeitet:
Hallo
Versuch es mal mit der zusätzlichen Option -F.
Ungetestet!
grep -vFf datei1 datei2

Gruß Wolfgang
 

Ähnliche Themen

Skript soll nicht doppelt laufen... kill pkill pid cron

script sshpass

[gelöst] - for file in ... nur für bestimmte Endungen?

Shell Skript beschleunigen

HandbrakeCLI Shell Skript

Zurück
Oben