2016-12-14 2 views
0

Ich glaube, was ich verlange, ist eine Art von Set-Operation. Ich brauche Hilfe versuchen, eine Liste der erstellen folgende:Unix-Dienstprogramm zum Vergleichen von Listen und Ausführen einer Set-Operation

Liste1 enthält:

1 
2 
3 
A 
B 
C 

List2 enthält:

1 
2 
3 
4 
5 
A 
B 
C 
D 
E 

(ich diese benötigen) - Die endgültige Liste Ich brauche wäre (4) Artikel:

4 
5 
D 
E 

Also offensichtlich List2 enthält mehr Elemente als List1. Letzte Liste, die ich brauche, sind die Elemente in List2, die NICHT in List1 sind.

Welches Linux-Dienstprogramm kann ich verwenden, um dies zu erreichen? Ich habe mir sort, comm angesehen, aber ich bin mir nicht sicher, wie man das richtig macht. Danke für die Hilfe

+0

Haben Sie einen Versuch machen, es gibt viele Fragen rund um für eine ähnliche Logik. – Inian

+0

Mögliches Duplikat von [finde den Unterschied zwischen zwei Textdateien mit einem Element pro Zeile] (http://stackoverflow.com/questions/4078933/find-difference-between-two-text-files-with-one-item-per- Linie) – Inian

Antwort

1

Verwenden awk mit einer direkten Logik.

awk 'FNR==NR{a[$0]; next}!($0 in a)' file1 file2 
4 
5 
D 
E 

Mit GNU comm Zweckdienlichkeit, in denen auf die man comm Seite nach,

comm -3 file1 file2 
     Print lines in file1 not in file2, and vice versa. 

es für Ihr Beispiel verwenden

comm -3 file2 file1 
4 
5 
D 
E 
0

Sie können es mit einem einfachen grep Befehl tun, das Spiels Umkehren mit -v und Lesen der Suchbegriffe aus list1 mit -f, z grep -v -f list1 list2. Beispiel Verwendung:

$ grep -v -f list1 list2 
4 
5 
D 
E 

Linux bietet eine Reihe von verschiedenen Möglichkeiten, diese Katze zu häuten.

0

Sie können dies versuchen:

$ diff list1.txt list2.txt | egrep '>|<' | awk '{ print $2 }' | sort -u 
4 
5 
D 
E 

Ich hoffe, Ihnen helfen

Verwandte Themen