Ich habe eine Datei1, die ein paar Zeilen (Zehner) hat, und eine viel längere Datei2 (~ 500.000 Zeilen). Die Zeilen in jeder Datei sind nicht identisch, obwohl es eine Teilmenge von Feldern gibt, die identisch sind. Ich möchte Felder 3-5 von jeder Zeile in Datei1 nehmen und suche Datei2 nach dem gleichen Muster (nur diese drei Felder, in der gleichen Reihenfolge - in Datei2, sie fallen in Felder 2-4). Wenn eine Übereinstimmung gefunden wird, möchte ich die entsprechende Zeile aus Datei1 löschen.awk/sed/grep um Zeilen zu löschen, die Felder in einer anderen Datei enthalten
ZB file1:
2016-01-06T05:38:31 2016-01-06T05:23:33 2016006 120E A TM Current
2016-01-06T07:34:01 2016-01-06T07:01:51 2016006 090E B TM Current
2016-01-06T07:40:44 2016-01-06T07:40:41 2016006 080E A TM Alt
2016-01-06T07:53:50 2016-01-06T07:52:14 2016006 090E A TM Current
2016-01-06T08:14:45 2016-01-06T08:06:33 2016006 080E C TM Current
file2:
2016-01-06T07:35:06.87 2016003 100E C NN Current 0
2016-01-06T07:35:09.97 2016003 100E B TM Current 6303
2016-01-06T07:36:23.12 2016004 030N C TM Current 0
2016-01-06T07:37:57.36 2016006 090E A TM Current 399
2016-01-06T07:40:29.61 2016006 010N C TM Current 0
... (und auf 500.000 Zeilen)
Also in diesem Fall möchte ich die vierte Zeile löschen von file1 (an Ort und Stelle).
Im Folgenden findet die Zeilen, die ich löschen will:
grep "$(awk '{print $3,$4,$5}' file1)" file2
So eine Lösung für Rohr dieser zu sed sein kann, aber ich bin mir nicht klar, wie ein Übereinstimmungsmuster setzen in einem verrohrt Eingang sed. Und die Online-Suche legt nahe, dass awk das alles kann (oder vielleicht sed oder etwas anderes), und sich fragt, wie eine saubere Lösung aussehen würde.
Auch Geschwindigkeit ist etwas wichtig, weil andere Prozesse versuchen, die Dateien zu ändern, während dies vor sich geht (ich weiß, dass dies mehr Komplikationen ergeben kann ...). Übereinstimmungen werden im Allgemeinen am Ende von Datei2 gefunden, nicht am Anfang (falls es eine Möglichkeit gibt, Datei2 von unten nach oben zu durchsuchen).
pluse-uno für hervorragend beschriebenes Problem. Schreib weiter und viel Glück. – shellter