Удалить строки из файла, где они присутствуют в другом файле 2 или более раз - PullRequest
1 голос
/ 13 марта 2019

Скажем, есть два файла File1.txt и File2.txt, каждый файл содержит адреса электронной почты.Мне нужно удалить все адреса электронной почты из file1.txt, если они присутствуют в file2.txt> = 2 раза.

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

Я видел, как другие люди использовали comm или diff для похожих вопросов, но я не уверен, что делать в этом случае.

Пример

File1.txt:  
abc@gmail.com  
def@gmail.com  
ghi@gmai.com  
jkl@gmail.com  

File2.txt:   
abc@gmail.com  
abc@gmail.com  
acb@gmai.com  
ghi@gmai.com  
jkl@gmail.com  

Вывод (файлы из файла file1, которые не находятся в file2.txt более 2 раз)

File3.txt:   
def@gmail.com  
ghi@gmai.com  
jkl@gmail.com    

Также предположим, что этот файл имеет размер 100 000+записи, так что это не может быть сделано вручную

Ответы [ 3 ]

1 голос
/ 13 марта 2019

Более или менее грубая сила это. Предполагая, что File2.txt не очень большой (то есть может более или менее полностью помещаться в памяти), вы можете просто просмотреть его, посчитать вхождения каждой строки, а затем использовать его, чтобы определить, печатать ли строку из File1.txt.

perl -nle 'BEGIN{open $f2, "<", "File2.txt" or die $!; while(<$f2>){$seen{$_}++}} print unless $seen{$_} > 2' File1.txt

Это приведет к удалению версии File1.txt на стандартный вывод, и вы сможете перенаправить ее как хотите.

0 голосов
/ 13 марта 2019

С помощью uniq вы можете найти повторяющиеся строки:

sort File2.txt | uniq -d

Эти строки вы хотите удалить из File1.txt.
Когда вывод uniq находится в файлеВы можете использовать этот файл для оператора grep.

sort File2.txt | uniq -d > /tmp/derek.tmp
grep -vf /tmp/derek.tmp File1.txt

Эти строки можно объединить в

grep -vf <(sort File2.txt | uniq -d) File1.txt
0 голосов
/ 13 марта 2019

Заказ File2.txt, и для каждой записи, которая является дубликатом, проверьте, присутствует ли она в File1.txt.(uniq -c может пригодиться)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...