2016-10-11 3 views
3

Я пытаюсь запустить команду поиска для поиска строк из файла1 и найти их в файле2. Затем я хочу напечатать ТОЛЬКО строки из файла1, которые НЕ НАЙДЕНЫ в файле2.Поиск строк, содержащихся в файле1, которые НЕ НАЙДЕНО в файле2

File1 будет что-то вроде:

read 
write 
access 

File2 будет:

0xFF88 T write 
0xFF87 t xyzwrite 
0xFF86 T read 
0xFF85 T xyzread 
0xFF84 T xyzaccess 

Таким образом, желаемый результат будет:

access 

*** Обратите внимание, я добавить пробел для всех строк в File1, чтобы не включать каждое вхождение строки, которая является частью другой строки.

Я пробовал:

grep -vf file1 file2 

и получить результаты от file2, которые все, кроме записи и чтения строки, адреса включены.

Я пробовал:

grep -vf file2 file1 

и получить все file1, так как вся линия file2 никогда не появляется в file1.

Я пробовал:

diff file1 file2 | grep \^|< 

и получить все file1 протекала с < на каждой строке.

Мне сказали, что если я смогу удалить первые 8 символов каждой строки в файле2, тогда будут работать команды diff/grep.

Я также попробовал findstr (Windows) с различными параметрами и снова, я не могу заставить его работать.

Также обратите внимание, что в каждом файле есть много строк, чем показано.

Любые идеи?

+0

если file1 имеет другой текст, чем показанный, пожалуйста, добавить фиктивные строки, иначе решение, данное не может работать на вы ... и уточните, какие столбцы между file1 и file2 должны быть сопоставлены. – Sundeep

ответ

0

Вы, вероятно, придется сделать петлю:

for i in $(cat File1); do 
    grep -q "\<$i\$" File2 || echo $i 
done 

Это напечатает:

access 
+0

Благодарим вас за помощь. Вышеприведенная версия печатает каждый раз, так что она по существу печатает весь файл1. Я немного запутался, потому что кажется, что первые несколько ничего не печатают, а затем печатает все, и все ведущие пробелы удаляются. – Dragonfly

+0

У вас есть пробелы в File2? Это может вызвать это. Одно решение: 'grep -q" \ <$ i * \ $ "File2' – mkj