2016-12-14 1 views
0

Je crois que ce que je demande est une sorte d'opération d'ensemble. Je besoin d'aide pour essayer de créer une liste des éléments suivants:Utilitaire Unix pour comparer des listes et effectuer une opération d'ensemble

Liste1 contient:

1 
2 
3 
A 
B 
C 

List2 contient:

1 
2 
3 
4 
5 
A 
B 
C 
D 
E 

(je en ai besoin) - La liste définitive j'ai besoin serait (4) articles:

4 
5 
D 
E 

Alors évidemment List2 contient plus d'éléments que List1. La liste finale dont j'ai besoin sont les éléments de List2 qui ne sont PAS dans List1.

Quel utilitaire linux puis-je utiliser pour accomplir ceci? J'ai regardé sort, comm mais je ne sais pas comment faire ceci correctement. Merci pour l'aide

+0

Avez-vous faire une tentative, il y a beaucoup de questions autour de la même logique. – Inian

+0

Copie possible de [trouver la différence entre deux fichiers texte avec un élément par ligne] (http://stackoverflow.com/questions/4078933/find-difference-between-two-text-files-with-one-item-per- ligne) – Inian

Répondre

1

En utilisant awk avec une logique directe.

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

En utilisant GNU comm utilitaire, où selon la page man comm,

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

l'utiliser pour votre exemple

comm -3 file2 file1 
4 
5 
D 
E 
0

Vous pouvez le faire avec une commande grep simple, inversant le match avec -v et en lisant les termes de recherche de list1 avec -f, par exemple grep -v -f list1 list2. Exemple d'utilisation:

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

Linux fournit un certain nombre de différentes façons de skin ce chat.

0

Vous pouvez essayer ceci:

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

, je l'espère vous aider