Ich habe eine große Datei, die aus durch Semikolons getrennten Textfeldern in Form einer großen Tabelle besteht. Es wurde sortiert. Ich habe eine kleinere Datei, die aus denselben Textfeldern besteht. Irgendwann hat jemand diese Datei mit anderen verkettet und dann die oben beschriebene große Datei sortiert. Ich möchte die Zeilen der kleinen Datei von der großen subtrahieren (dh für jede Zeile in der kleinen Datei, wenn eine übereinstimmende Zeichenfolge in der großen Datei vorhanden ist, löschen Sie diese Zeile in der großen Datei).
Die Datei sieht ungefähr so aus
GenericClass1; 1; 2; NA; 3; 4;
GenericClass1; 5; 6; NA; 7; 8;
GenericClass2; 1; 5; NA; 3; 8;
GenericClass2; 2; 6; NA; 4; 1;
etc
Gibt es eine schnelle klassische Möglichkeit, dies zu tun, oder muss ich awk verwenden?
quelle
-x
Option auch besser gewesen wäre, wenn mir eine Zeile in der kleineren Datei eine Teilzeichenfolge einer anderen Zeile in der Hauptdatei zugestoßen wäre. Es ist auch gut möglich, dass @ UlrichSchwarz schneller antwortet.comm
ist dein Freund:(
comm
hat wahrscheinlich einen Leistungsvorteil gegenübergrep
da es die Sortierbarkeit berücksichtigt.)Beispielsweise:
quelle
comm -1 -3 file.txt bigfile.txt > newbigfile.txt
comm -1 -3 <(sort BAD.txt GOOD.txt) <(sort FILES.txt)