2016-12-14 7 views
0

Я считаю, что то, о чем я прошу, - это своего рода операция набора. Мне нужна помощь в попытке создать список из следующих действий:Утилита unix для сравнения списков и выполнения заданной операции

List1 содержит:

1 
2 
3 
A 
B 
C 

List2 содержит:

1 
2 
3 
4 
5 
A 
B 
C 
D 
E 

(мне это нужно) - Окончательный список я должен был бы быть (4):

4 
5 
D 
E 

Таким образом, очевидно, что List2 содержит больше элементов, чем List1. Последний список, который мне нужен, это элементы в List2, которые не входят в список1.

Какую утилиту linux я могу использовать для этого? Я посмотрел на sort, comm, но я не уверен, как это сделать правильно. Спасибо за помощь

+0

ли вы сделать попытку, есть много вопросов вокруг подобной логики. – Inian

+0

Возможный дубликат [найти разницу между двумя текстовыми файлами с одним элементом в строке] (http://stackoverflow.com/questions/4078933/find-difference-between-two-text-files-with-one-item-per- линия) – Inian

ответ

1

Использование awk с прямой логикой.

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

Использование GNU comm утилиты, где в соответствии с man comm страницы,

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

Использованием его для примера

comm -3 file2 file1 
4 
5 
D 
E 
0

Вы можете сделать это с помощью простого grep команды инвертирующей матча с -v и считывая условия поиска из списка1 с помощью -f, например grep -v -f list1 list2. Пример использования:

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

Linux предлагает несколько способов обмануть этого кота.

0

Вы можете попробовать это:

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

я надеюсь помочь вам

 Смежные вопросы

  • Нет связанных вопросов^_^