Wörter einer Blacklist aus einer Textdatei löschen...

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
ManfredG
Beiträge: 112
Registriert: 12.08.2004 17:38:14

Wörter einer Blacklist aus einer Textdatei löschen...

Beitrag von ManfredG » 07.12.2004 00:27:05

Hallo,
ich habe eine Textdatei (Pro Zeile ein Wort) und eine Blacklist (Pro Zeile ein Wort).

Wie kann ich die Wörter der Blacklist aus der Textdatei entfernen?

Wie kann ich z.B. mit sed eine Variable verwenden?
sed 's/$LINE//g' textdatei.txt > textdatei_clean.txt
funktioniert z.B. nicht.

Herzlichen Dank für Euere Hilfe
Manfred

smashie
Beiträge: 168
Registriert: 21.02.2004 11:23:53

Beitrag von smashie » 07.12.2004 00:47:57

hm ich würde das mittels perl oder tcl script lösen :)

Einfach zwei schleifen, die eine liest die blacklist aus, die andere die Liste zu löschender Wörter .. danach gibts halt bei jedem \n read aus der blacklist nen abgleich durch die gesamte andere List wenn es matched => weg damit wenn nicht zum nächsten blacklist wort ... :wink:
Intel Pentium E2180 @ 3,2 Ghz / Geforce 8800GT / 4096 MB DDRII 800 / 320GB Seagate 7200.11 HDD
running debian 'sid' kernel 2.6.26-rc7/Gnome 2.22

Benutzeravatar
Dookie
Beiträge: 1104
Registriert: 17.02.2002 20:38:19
Wohnort: Salzburg
Kontaktdaten:

Beitrag von Dookie » 07.12.2004 23:48:10

Hi ManfredG,

hier mal eine Lösung in Python:

Code: Alles auswählen

#!/usr/bin/env python

import sys
from optparse import OptionParser

if __name__ == "__main__":
    # OptionParser initialisieren
    usage = "usage: %prog [options] [blacklist]"
    parser = OptionParser(usage)
    parser.add_option("-i", "--in", dest="infile",
                      help="read data from INFILE")    
    parser.add_option("-o", "--out", dest="outfile",
                      help="write data to OUTFILE")
    parser.add_option("-b", "--blacklist", dest="blacklist",
                      help="FILENAME of blacklist")
    
    # Programmargumente und Optionen auswerten
    options, args = parser.parse_args()
    if len(args) == 1:
        blfile = open(args[0], 'r')
    elif options.blacklist is not None:
        blfile = open(optons.blacklist, 'r')
    else:
        parser.error("no blacklist defined!")
    infile = open(args[0])
    if options.infile is not None:
        infile = open(options.infile, 'r')
    else:
        infile = sys.stdin
    if options.outfile is not None:
        outfile = open(options.outfile, 'w')
    else:
        outfile = sys.stdout
    
    # Datei filtern
    blacklist = blfile.read().split()
    blfile.close()
    for line in infile:
        if line.strip() not in blacklist:
            outfile.write(line)
Du kannst das Script einfach mit
blacklist.py --in=eingabedate --out=ausgabedatei --blacklist=blacklist
aufrufen. wenn kein --in angegeben wird wird von stdin gelesen, entsprechend wenn kein --out angegeben ist nach stdout geschrieben, --blacklist= ist optional, es wird dann das erste argument als Dateiname der blacklist angesehen
blacklist.py blacklist.txt
gibt die Eingabe aus der Standardeingabe gefiltert durch "blacklist.txt" nach Standardausgabe aus


Gruß

Dookie

Benutzeravatar
Joghurt
Beiträge: 5244
Registriert: 30.01.2003 15:27:31
Wohnort: Hamburg
Kontaktdaten:

Re: Wörter einer Blacklist aus einer Textdatei löschen...

Beitrag von Joghurt » 08.12.2004 00:26:21

ManfredG hat geschrieben:sed 's/$LINE//g' textdatei.txt > textdatei_clean.txt
funktioniert z.B. nicht.
In diesem Falle musst du " anstatt ' benutzen, damit die Variablensubstitution stattfindet:

Code: Alles auswählen

$ echo '$PWD'
$PWD
$ echo "$PWD"
/tmp

Benutzeravatar
peschmae
Beiträge: 4844
Registriert: 07.01.2003 12:50:33
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: nirgendwo im irgendwo

Beitrag von peschmae » 08.12.2004 07:32:15

ausserdem kannst du statt einem
sed "s/$LINE//g" textdatei.txt > textdatei_clean.txt && mv textdatei_clean.txt textdatei.txt
ein
sed "s/$LINE//g" -i textdatei.txt
verwenden.

MfG Peschmä
"er hätte nicht in die usa ziehen dürfen - die versauen alles" -- Snoopy

Antworten