2016-04-24 11 views
0

Welcher Unix-Befehl/Dienstprogramm kann ich verwenden, um meine endgültige Liste von Namen basierend auf meinen 2 Listen unten zu erstellen? Dies wäre wie eine SET Operation. Der Hauptvergleich muss jedoch gegen NameList1 erfolgen. Wenn NameList2 einen zusätzlichen Namen hat, darf er nicht in die Hauptliste aufgenommen werden.Unix-Befehl, um Listenvergleiche auszuführen, die einer Set-Operation entsprechen

Hinweis: Ich kann nicht sortiert haben (alphabetisch usw.). Ich muss die Spaltenposition (natürliche Reihenfolge) beibehalten, wie ich bereits in meiner Liste oben, unten angegeben habe. Danke für Ihre Hilfe.

NameList1:

Joe 
John 
Mary 
Mike 
Allan 
David 
Andrew 
Matt 

NameList2:

Joe 
John 
Mary 
George 
Jeff 
Allan 
David 
Andrew 
Frank 

Wenn ich ein diff mit einem Side-by-Side-Vergleich können Sie den Vergleich sehen. Wie so:

-bash-4.1$ diff --side-by-side NameList1.txt NameList2.txt 
Joe        Joe 
John        John 
Mary        Mary 
Mike         | George 
            > Jeff 
Allan        Allan 
David        David 
Andrew        Andrew 
Matt         | Frank 

Das Ergebnis, erwartet für meine endgültige Liste wäre:

Joe 
John 
Mary 
Mike 
Allan 
David 
Andrew 
Matt 

Wo George, Jeff, Frank von NameList1 entfernt wird. Wie kann ich diese endgültige Liste erstellen? Gibt es einen besseren Werkzeugbefehl? Benutze ich diff richtig?

+0

ist das Ergebnis identisch mit Ihrer Liste1? – haifzhan

+0

Ihr Problem ist nicht gut definiert. –

+0

Wie in meiner 'Master'-Liste aufgeführt ist, was ich produzieren muss. In anderen Worten, was auch immer in NameList2 ist, das nicht in NameList1 ist, entfernen Sie es aus NameList1. – noober

Antwort

1

Dies kann mit einem einfachen Befehl join erreicht werden. In meinem Mac, gibt folgende erwartete Ergebnis

join -a1 NameList1 NameList2

>  -a file_number 
>     In addition to the default output, produce a line for each 
>     unpairable line in file file_number. 

bearbeiten

Unter Linux --no-checkorder Option auf Eingaben überprüft würde vermeiden Reihenfolge sortiert.

join -a1 --nocheck-order NameList1 NameList2

+0

Das funktioniert, aber gibt es eine Möglichkeit, die Ausgabe 'join: file zu unterdrücken 2 ist nicht in der Sortierreihenfolge "," Join: Datei1 ist nicht in sortierter Reihenfolge "? – noober

+0

Ich bekomme diese Nachricht nicht in Mac. Kann es einen Schalter geben, um Warnungen zu unterdrücken? schau dir 'man beitreten

+0

ah..du bist richtig auf einem mac klappt es. Ich führe jedoch CentOS 6 und ich sehe nicht auf man-Seiten, um das zu verdrängen. – noober

Verwandte Themen