dateien vergleichen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
Huck Fin
Beiträge: 1202
Registriert: 10.03.2008 17:10:30

dateien vergleichen

Beitrag von Huck Fin » 30.05.2016 22:48:10

Hi,
ich habe zwei Dateien mit Mailadressen.
Wenn eine mail-adresse in datei 1 ist, soll sie aus datei 2 gelöscht werden.
Gibt es da einen schönen 1 - 2 zeiler ?

inne
Beiträge: 3281
Registriert: 29.06.2013 17:32:10
Lizenz eigener Beiträge: GNU General Public License
Kontaktdaten:

Re: dateien vergleichen

Beitrag von inne » 30.05.2016 23:44:22

comm --check-order -3 dat1 dat2 >neue-dat
mv neue-dat dat2

Ungetestet, es ist spät... und ich habe comm lange nicht mehr benutzt.

// Nach lesen der Manpage noch der Hinweis, die Dateien müssen sortiert sein

tobo
Beiträge: 1991
Registriert: 10.12.2008 10:51:41

Re: dateien vergleichen

Beitrag von tobo » 31.05.2016 00:43:40

Vielleicht besser noch - je nach Reihenfolge - Schalter 1 bzw. 2 hinzufügen, damit "einzigartig" zu löschende Adressen nicht dem Pool hinzugefügt werden:

Code: Alles auswählen

comm -13 <(sort f_delete) <(sort f_pool) >f_pool_new && mv f_pool_new f_pool

uname
Beiträge: 12072
Registriert: 03.06.2008 09:33:02

Re: dateien vergleichen

Beitrag von uname » 31.05.2016 08:10:48

Sollten die Dateien klein sein (sagen wir mal unter 1 Millionen Zeilen) könnte man sie vielleicht zeilenweise in Variablen schreiben (awk?) und dann erst die zweite Datei entsprechend durchlaufen lassen. Spart die Sortierung und kostet nur etwas mehr RAM.

Benutzeravatar
Huck Fin
Beiträge: 1202
Registriert: 10.03.2008 17:10:30

Re: dateien vergleichen

Beitrag von Huck Fin » 03.06.2016 17:53:15

tobo hat geschrieben:Vielleicht besser noch - je nach Reihenfolge - Schalter 1 bzw. 2 hinzufügen, damit "einzigartig" zu löschende Adressen nicht dem Pool hinzugefügt werden:

Code: Alles auswählen

comm -13 <(sort f_delete) <(sort f_pool) >f_pool_new && mv f_pool_new f_pool
Funktioniert gut :THX:

Ich hole mir aus allen Maildir/gesendet die Mailadressen
Dann alle gesendeten aus der Mail.log
alles lowercase unique...
Das wird meine Whitelist

Alles was ich in Junk-E-Mail schiebe wird meine Blacklist
Spamassassin markiert Junk und procmailrc verschiebt x-spam-status=yes auch nach Junk-E-Mail

Da manche aus Versehen in Junk landen, lösche ich alle in der Whitelist aus der Blacklist
Procmailrc ist angewiesen, alle aus der Whitelist nicht auf Junk zu prüfen sondern in den Posteingang zu schieben.
Fertig...
Das funzt sehr gut...
Somit werden selbst von spamassassin als Junk markierte in den Posteingang gelegt.
Und alle aus der Blacklist direkt nach Junk-E-Mail

Antworten