Команда Unix для поиска строк в одном файле с ключом, не найденным в другом файле

Оба файла отсортированы, а дубликаты удалены. Я хочу сравнить field1 из file1 с field1 file2 и вывести строку из file1, которой нет в file2. Не задана длина для field1, и это вызывает у меня проблемы с использованием uniq.

Вот пример данных:

File1:

UUID(78-d55) NODETYPE(B) 22:42:05  
UUID(78-d51) NODETYPE(B) 22:42:05
UUID(78-dca) NODETYPE(B) 22:42:37
UUID(78-494) NODETYPE(B) 22:42:37
UUID(dp@20181206003956969) NODETYPE(B)  00:39:56

File2:

UUID(78-d55) NODETYPE(B) POLNODE(/inbound/us)   
UUID(78-74e) NODETYPE(B) POLNODE(/inbound/us) 
UUID(78-053) NODETYPE(B) POLNODE(/inbound/us)     
UUID(78-5d6) NODETYPE(B) POLNODE(/inbound/us)    
UUID(78-dca) NODETYPE(B) POLNODE(/inbound/us)   
UUID(78-b0b) NODETYPE(B) POLNODE(/inbound/us)    
UUID(dp@20181206003956969) NODETYPE(B)  POLNODE(/inbound/us) 

что я хочу:

UUID(78-d51) NODETYPE(B) 22:42:05 
UUID(78-494) NODETYPE(B) 22:42:37 

1 ответ

Похоже, работа для join - И его -v опция:

$ join -v1 file1 file2
UUID(78-d51) NODETYPE(B) 22:42:05
UUID(78-494) NODETYPE(B) 22:42:37
$

Обратите внимание, что это зависит от сортируемых файлов, как указано, и от столбцов соединения, являющихся столбцом 1 в каждом файле, и от полей, разделенных пробелами или вкладками. Каждый из них может быть изменен дополнительными опциями, если это необходимо.

Это также может быть легко сделано в Awk - и в Perl и Python и... других скриптовых языках.

Другие вопросы по тегам