verbinden Sie zwei Dateien basierend auf zwei Spalten

8

Ob Sie es glauben oder nicht, ich habe das ganze Internet durchsucht und in AWK keine funktionierende Lösung für dieses Problem gefunden.

Ich habe zwei Dateien, A und B:

Datei A:

%Vor%

Datei B:

%Vor%

Gewünschte Ausgabe:

%Vor%

Ich möchte diese beiden Dateien verbinden, um die Schnittmenge zwischen den beiden Dateien basierend auf der ersten UND zweiten Spalte zu erhalten, nicht nur die erste. Da dies der Fall ist, funktionieren die meisten einfachen Skripte nicht und Join scheint keine Option zu sein.

Irgendwelche Ideen?

EDIT: Entschuldigung, ich habe nicht erwähnt, dass es mehr Spalten gibt als nur die zwei, die ich gezeigt habe. Ich habe nur zwei in meinem Beispiel gezeigt, weil ich nur an den ersten beiden Spalten zwischen beiden Dateien interessiert bin, die identisch sind, der Rest der Daten sind nicht wichtig (aber sind dennoch in der Datei)

    
Nick 12.09.2011, 18:27
quelle

4 Antworten

9

Hum, meine Idee ist die folgende: Verwenden Sie join , um die beiden Dateien zusammenzuführen und mit awk

zu korrigieren %Vor%

Bearbeiten: Bei der Bearbeitung funktioniert die Join-Lösung möglicherweise noch (mit Optionen), so dass das Konzept korrekt bleibt (imo).

    
Aif 12.09.2011, 18:37
quelle
4

Die awk Lösung ist:

%Vor%

Platzieren Sie die kleinere Datei zuerst, da Sie sie im Speicher halten müssen.

    
glenn jackman 12.09.2011 19:47
quelle
2

Ich würde es so schreiben:

%Vor%

Die Reihenfolge der Eingabedateien muss möglicherweise entsprechend der genauen Anforderung angepasst werden.

    
Dimitre Radoulov 12.09.2011 20:47
quelle
1

Warum nicht einfach grep -f gefällt das:

%Vor%

BEARBEITEN:

Bei Dateien mit mehr als zwei Spalten versuchen Sie Folgendes:

%Vor%     
anubhava 12.09.2011 18:43
quelle

Tags und Links