93578
Goto Top

Nach Zeilen aus der ersten Textdatei in der zweiten Textdatei suchen und diese dort entfernen

Frohes Neues an alle!

Ich habe 2 Textdateien.

Die erste Textdatei beinhaltet Suchbegriffe, die ich in der zweiten Datei finden und löschen will. Die erste Datei ist ca. 5 MB Groß.

Datei1.txt:
heinz
heinz-olaf
gunther
dennis
oxana
irene
claudia
roxana
klaus

Die zweite Textdatei beinhaltet Begriffe, die durchsucht (zeilneweise) und bei Übereinstimmung mit dem Begriff aus der ersten Datei gelöscht werden müssen. Die zweite Datei ist ca. 20 GB groß.

Datei2.txt:
heinz
heinz.musterschmidt
heinz-peter
mercedes
gunther12
gunther_mustermann
dennis-1
dennis oldways
oxana-rock
pustekuchenoxana
irene, ich liebe dich
irene34
19irene68
claudia_alpha
claudia-beta
claudia-gamma
roxana aus roxet
roxana-bilbao
klaus-maus
superklaus

Am Ende soll nur das Wort "mercedes" bleiben.

Bis jetzt habe ich folgendes Bash-Script benutzt (hat mein Vorgänger geschrieben):

#!/bin/bash

if [ $# -ne 1 ];
then
	echo "usage: ./clean.sh original.txt > neu.txt"  
	exit 2
fi

grep -v -f Datei1.txt $1

und dann:

./clean.sh Datei2.txt >  neu_aus_Datei2.txt

Leider bei solchen größen Dateien (5 MB und 20GB) dauert es mit dem GREP-Befehl zu lange (bis 1-3 Tagen) und der RAM-Kapazität reicht dafür nicht aus (trotz 64 GB RAM kommt immer wieder Speicherzugriiffsfehler, weil RAM über 100% belastet wird).

Wie kann man diese Sache beschleunigen ohne die Datei 1 auf zig kleinere Dateien unterteilen? AWK? Aber wie?

Content-Key: 360560

Url: https://administrator.de/contentid/360560

Printed on: April 26, 2024 at 07:04 o'clock

Mitglied: 135111
Solution 135111 Jan 10, 2018 updated at 09:54:43 (UTC)
Goto Top
Mitglied: 93578
93578 Jan 10, 2018 updated at 10:05:21 (UTC)
Goto Top
Mit Linux habe ich leider nicht viel am Hut. Und mit sed noch weniger. Habe zwar durchgelesen, aber nur Bahnhof verstanden. Und wenn ich es richtig sehe - bezieht sich die Lösung wieder nur auf einen bestimmten String (Anfang mit 192.) und nicht auf mehrere diverse Strings wie in meinem Fall. face-sad
Mitglied: 93578
93578 Jan 10, 2018 updated at 12:11:45 (UTC)
Goto Top
Ich habe folgende Lösung gefunden:

cp Datei2.txt Ergebnis.txt
cat Datei1.txt | xargs -I {} sed -i '/{}/d' Ergebnis.txt  

Danke an alle, die geantwortet haben!