У меня есть два текстовых файла на Linux. Каждый содержит список действительных идентификаторов. Например:
abcd
efgh
ijkl
etc.
Другой содержит список недопустимых идентификаторов. Но, некоторые из них также появляются в списке действительных идентификаторов в этом примере "efgh":
mnop
qrst
efgh
etc.
Как я могу легко создать текстовый файл, который содержит все строки из недопустимого списка, которые не появляются в действительном списке? Таким образом, я хочу закончить с текстовым файлом, который имеет:
mnop
qrst
etc.
Я хотел бы любое некоторое волшебство командной строки Linux некоторого умного обмана Vim.Заранее спасибо!
Принятию Вас назвали файлы valid
и invalid
, можно отсортировать их:
вид, допустимый> допустимо отсортированный; вид, недопустимый> недопустимо отсортированный
затем сравните:
разность, допустимо отсортированная недопустимо отсортированный
Вывод будет (принятие Ваших данных в качестве примера):
1d0
< abcd
3c2,3
< ijkl
---
> mnop
> qrst
Материал с' <' находится только в первом файле, материале с'>' только в (недопустимом) втором.
Таким образом diff valid-sorted invalid-sorted |grep '^>'
должен дать Вам строки, появляющиеся в недопустимом, но не в допустимом.
Снятие продвижения'>' оставляют как осуществление для читателя ;-).
Протест: Это не будет работать, если Ваши входные файлы на самом деле будут содержать'>' в начале строки. Необходимо будет сделать некоторых обманывающих затем...
У меня есть своя собственная утилита для этого, которое полагается на другого; они также работают над неотсортированным входом. Основное использование
except file1 file2 > file2-except-any-lines-in-file1