Anzeige:
Ergebnis 1 bis 6 von 6

Thema: Abgleich von ASCII-Dateien

  1. #1
    Registrierter Benutzer
    Registriert seit
    20.03.2006
    Beiträge
    180

    Abgleich von ASCII-Dateien

    Hallo,

    ich möchte eine Textdatei (*.txt) gegen eine Referenzdatei (ebenfalls *.txt; "Wörterbuch") abgleichen. Das Ergebnis soll eine Datei sein von Zeichenketten, die in der erstgenannten Datei vorkommen, NICHT aber in der Referenzdatei.

    Die Zeilen der erstgenannten Textdatei und die Referenzdatei bestehen jeweils nur aus einem "Wort" (Buchstabenfolgen).

    Zur Zeit löse ich die Aufgabe, indem ich an die Zeilen der erstgenannten Datei einen Feldtrenner (z.B. "!") und die Zeichenkette "0", an die Zeilen der Referenzdatei den gleichen Zeilentrenner sowie die Zeichenkette "1" anhänge. Dann beide Dateien in einen Topf, sortieren, und mit einer etwas umständlichen Logik in awk die Aufgabe löse.

    Geht es mit Unix-Boardmitteln auch einfacher und wie?

    Beispiel:

    Erstgenannte Datei:
    Hund
    Katze
    Maus

    Referenzdatei:
    Katze
    Giraffe
    Löwe
    Elefant

    Soll-Ergebnis des Abgleichs:
    Hund
    Maus

    Vielen Dank im voraus!

    Gruss
    Dieter

  2. #2
    Registrierter Benutzer Avatar von John W
    Registriert seit
    29.01.2010
    Beiträge
    211
    Ganz einfach:
    Code:
    diff erstgenannte_datei referenzdatei | sed -nr 's#^< (.+)$#\1#p'

  3. #3
    Registrierter Benutzer
    Registriert seit
    14.01.2002
    Beiträge
    657
    zB so:
    Code:
    perl -ne 'BEGIN { open(fh,"referenzdatei"); $t{$_}=1 while(<fh>); } print if !$t{$_}' ersteDatei

  4. #4
    Registrierter Benutzer
    Registriert seit
    14.01.2002
    Beiträge
    657
    Zitat Zitat von John W Beitrag anzeigen
    Ganz einfach:
    Code:
    diff erstgenannte_datei referenzdatei | sed -nr 's#^< (.+)$#\1#p'
    funktioniert halt nicht wenn die dateien nicht sortiert sind..

    Code:
    $ cat 1
    Katze
    Maus
    Löwe
    Hund
    $ cat 2
    Giraffe
    Löwe
    Elefant
    Katze
    $ diff 1 2 | sed -nr 's#^< (.+)$#\1#p'                       
    Katze
    Maus
    Hund
    Katze ist hier leider falsch

  5. #5
    Registrierter Benutzer Avatar von John W
    Registriert seit
    29.01.2010
    Beiträge
    211
    Ah, sortieren wär auch noch nötig, stimmt...
    Dann halt so:
    Code:
    diff <(sort erstgenannte_datei) <(sort referenzdatei) | sed -nr 's#^< (.+)$#\1#p'
    *verzweifelt-gegen-perl-ankämpf*

  6. #6
    Registrierter Benutzer
    Registriert seit
    20.03.2006
    Beiträge
    180
    Vielen Dank für eure Lösungen!

    ... und schon ist der Abend "gesichert" :lol:

    Gruss
    Dieter

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •