2016-04-05 3 views
0

У меня есть два файла, которые содержат некоторые подобные данные и некоторые уникальные данные. Я хотел бы узнать, какие данные отображаются в first.txt, который не отображается в second.txt.Обратный grep, найти все несоответствия

Во-первых, я решил использовать diff как очевидный вариант, но порядок, который данные отображаются в файлах, важен.

Вот что я имею в виду. Если данные в порядке, то я получаю информацию, которую я ожидаю.

macbook:labs alex$ cat first.txt 
1 
2 
3 
4 
5 
macbook:labs alex$ cat second.txt 
1 
3 
5 
macbook:labs alex$ diff first.txt second.txt 
2d1 
< 2 
4d2 
< 4 

Однако, если смешать порядок данных внутри файлов вверх немного выход сильно отличается

macbook:labs alex$ cat first.txt 
5 
2 
1 
4 
3 
macbook:labs alex$ cat second.txt 
3 
1 
5 
macbook:labs alex$ diff first.txt second.txt 
1,4d0 
< 5 
< 2 
< 1 
< 4 
5a2,3 
> 1 
> 5 

Я также думал, используя Grep, в виде петли

#!/bin/bash 
a="first.txt" 
b="second.txt" 

for row in `cat $a` 
    do grep $row $b 
done 

Однако, это только сказать мне, что в второй, то есть также в первой. Я хочу узнать, что является уникальным для

Возможно, я не понимаю этого достаточно хорошо, но, по-видимому, мне не помогает опция -внешний вариант grep.

#!/bin/bash 
a="first.txt" 
b="second.txt" 
for row in `cat $b` 
do 
    grep -v $row $a 
done 

Может кто-нибудь светить на это?

Спасибо,

ответ

0

Я хотел бы узнать, какие данные отображаются в first.txt, что не появляется в second.txt

Вы можете использовать grep -vf:

grep -vFf second.txt first.txt 

2 
4 
1

Если у вас есть выбор вы можете использовать comm, чтобы найти уникальные для первого файла данные:

comm -23 file1 file2 

-23 подавляет линии, которые в обоих файлах, или только в файле 2. Дело в том, что файлы должны быть отсортированы сначала, но если они не вы можете трубы их с помощью команды sort.

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