Melhor maneira de remover linhas de um arquivo em que o texto correspondente (não a linha inteira) existe em outro arquivo

5

Eu tenho um arquivo de endereços de e-mail (arquivo 1) e outro arquivo (arquivo 2) de linhas de dados que contêm alguns desses endereços de e-mail

Eu quero comparar arquivos e remover todas as linhas no arquivo 2 que tenham um email correspondente no arquivo 1.

Eu sei que posso fazer um loop e usar sed -i ou loop e grep cada linha para um novo arquivo, em seguida, comparar arquivos com COMM

Mas eu queria saber se existe um método de comparação que eu possa meio que grep todas as linhas no arquivo1 para o arquivo2 e apenas ficar com as linhas do arquivo2 que não contêm nenhum e-mail no arquivo 1

arquivo 1:

[email protected]
[email protected]
[email protected]

arquivo 2:

23456|tom|jones|test@goodemailcom|10
12345|pete|best|[email protected]|10
87569|remove3|me3|[email protected]|10
23098|mike|jones|mike@goodemailcom|10
10985|al|best|[email protected]|10
09865|removve|me|[email protected]|10
13579|remove2|me2|[email protected]|10

Aprecie qualquer conhecimento que alguém tenha.

    
por vic 18.03.2013 / 20:01

1 resposta

8

Você pode usar fgrep para isso:

fgrep -v -f file1  file2  > unique_addresses

Esta tarefa será muito mais fácil se você tiver 1 endereço de e-mail por linha nos dois arquivos.

Tradicionalmente o fgrep existe como um programa separado, mas nos utilitários GNU, grep -F faz o mesmo.

    
por 18.03.2013 / 20:10