GREP - correspondência de padrão do arquivo que retorna apenas no último padrão da lista

0

Eu tenho uma lista de cerca de 23 milhões de hashes em um arquivo de texto, um hash por linha. Chame-o de hashes.txt Eu tenho uma lista de valores hash incômodos (app 40) em outro arquivo de texto, novamente um hash por linha. Chame isso de culls.txt

Eu estou tentando usar os padrões em culls.txt para fazer um grep reverso, o que quer dizer que eu quero mostrar qualquer linha que não corresponda a nenhum dos padrões na lista de seleção.

grep -v -F -f culls.txt hashes.txt > Output.txt

O que está acontecendo é que apenas o último hash da lista de 40 ou mais foi removido. Todos os hashes nas linhas precedentes permanecem. Estou frustrado. Sugestões? E, sim, os valores estão no arquivo hash; - >

    
por Steve B 16.11.2015 / 20:52

1 resposta

3

O fato de que apenas o último hash é reconhecido pode apontar para um problema de final de linha em todas as linhas, exceto na última.

Eu testei isso no meu sistema (Ubuntu 14.04; grep (GNU grep) 2.16) com os seguintes arquivos:

$ cat culls.txt 
h00
h10
h20
h30
h40
$ cat culls2.txt 
h00
h10
h20
h30
h40
$ cat hashes.txt 
h04
h11
h13
h30
h61
h40
h41
h39
h42
$ file culls.txt hashes.txt  culls2.txt
culls.txt:  ASCII text
hashes.txt: ASCII text
culls2.txt: ASCII text, with CRLF line terminators

A saída que recebo usando culls.txt é a esperada ( h30 e h40 removido da saída):

$ grep -v -F -f culls.txt hashes.txt
h04
h11
h13
h61
h41
h39
h42

A saída que eu recebo usando culls2.txt é semelhante ao que você vê (somente h40 removido da saída; h30 ainda está lá):

$ grep -v -F -f culls2.txt hashes.txt
h04
h11
h13
h30
h61
h41
h39
h42

Não há finais de linha na última linha de culls2.txt .

Quando também adicionei um terminador de linha CRLF à última linha que obtive:

$ grep -v -F -f culls3.txt hashes.txt
h04
h11
h13
h30
h61
h40
h41
h39
h42

Agora nenhum dos hashes é retirado da saída.

Isso prova que os terminadores de linha CRLF são o problema.

    
por 16.11.2015 / 22:03

Tags