Zwei Dateien vergleichen

C

combat

Grünschnabel
Hallo Zusammen,

ich beschäftige mich seit kurzem mit Unix und hab schon folgende Aufgabe, die ich lösen möchte. Vielleicht könnt ihr mir helfen.

Zwei Dateien möchte ich vergleichen die folgend aussehen.

Datei1.csv:

wert1a;wert1b;wert1c;wert1d
wert2a;wert2b;wert2c;wert2d
wert3a;wert3b;wert3c;wert3d

Datei2.txt

wert1a#wert1b#wert1c#wert1d
wert2a#wert2b#wert2c#wert2d
wert3a#wert3b#wert3c#wert3d

Jetzt möchte ich wissen, ob wert1a bis wert[n]a in der zweiten Datei2.txt in Spalte a vorhanden ist. Dabei soll in der ganzen Spalte von Zeile 1 bis n gesucht werden.
Wird ein Wert gefunden, so soll dieser in eine neue DateiXY geschrieben werden.

Ich denke das es mit awk funktionieren sollte, aber da ich mich erst seit kurzem damit beschäftige weiß ich nicht wie ich überhaupt anfangen soll.
Wenn möglich sollte dies unter C-Shell lauffähig sein.

Gruß combat
 
Ich würde glaube ich perl nehmen, aber das extra dafür zu lernen wäre mir zu kompliziert wenn ichs nicht schon könte. Aber wir haben hier ein paar Shell Gurus, die können dir sicher sagen, ob's mit der Shell ginge...
 
In Perl kenne ich mich nicht so aus. Ich will es schon in C-Shell schreiben.
Trotzdem Danke!
 
Hallo combat,
hast Du schon einen Lösungsansatz ? Oder hat sich das Thema erledigt?
Gruss zst
 
Hi zst,
nein, ich habe noch keine Lösung. Hast du vielleicht eine Idee?
Gruß combat
 
ich habe etwas gefunden: http://jmop.de/2008/01/23/awk-dateien-vergleichen/

in etwa so geht es:
PHP:
BEGIN { FS=";|#" }
NR==FNR { a[$1]=$0; next }
($1 in a) {
        printf "%s\n", $0
}

Das Skript gibt alle Zeilen der 2. Datei aus die auch in der ersten Datei gefunden (erster Wert identisch) wurde. Willst du das Ausgabeformat der 1. Datei, so kannst du $0 durch a[$1] ersetzen.

//edit: aufruf: 'awk -f awk_file Datei1.csv Datei2.txt'
 
Hallo combat,
ohne awk ginge es per normaler BASH auch so:

Code:
for i in $(cut -d ";" -f1 ./Datei1.csv)
     do
     grep $i ./Datei2.txt >>./DateiXY
done

Gruss zst
 
'grep' würde ich auch nehmen. Übrigens kannst du 'grep' auch in Perl nutzen!
 
1. Wenn überhaupt müsste das fgrep sein (oder grep -F). ABER, es soll nach dem Wert nur in der ersten Spalte gesucht werden. Dann wird das gleich etwas umfangreicher. (Nicht viel, aber etwas.)
2. Es wurde bereits zwei mal im Thread die verwendete Shell angegeben...
und 3.
Wird ein Wert gefunden, so soll dieser in eine neue DateiXY geschrieben werden.
Es soll nur der gefundene Wert in die dritte Datei geschrieben werden, nicht die gesamte Zeile..

Ich würd btw mal schätzen, dass das für die anderen Spalten dann genauso laufen soll...

edit:
Übrigens kannst du 'grep' auch in Perl nutzen!
Nur ist das da was völlig anderes.
 

Ähnliche Themen

Zeilen aus Txt-Datei entfernen, wenn eine Spalte einen bestimmten Wert enthält

Spalten einer Datei in neue Datei integrieren.

Mit AWK verschiedene Felder verschiedener Zeilen vergleichen

Bestimmte Zeilen einer Spalte addieren

Bash - Zwei Binärdateien vergleichen (SQL Diff)

Zurück
Oben