Команда 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 и... других скриптовых языках.