Arquivo de texto contendo nomes de arquivos e hashes - extraindo linhas com hashes duplicados

4

Eu criei um grande arquivo de texto contendo nomes de arquivos e sha-256 hashes usando o formato abaixo - nova linha no final de cada linha depois dos hashes.

arquivo_1.txt 8208ad321576b521b23b07b9ba598e5c43b03ec4172c96fdbd35a858ec205ae6

arquivo_2.txt ee508a6e34a2383db1b177cb9527bed16ba72b47ceb4d33ab71b47a44c1d0c31

arquivo_3.txt aaf6b8c4a95d0e8f191784943ba1ea5c0b4d4baab733efe8ceb8b35478b6afd2

Quando digo grande - está nos milhões de linhas - milhões de hashes.

Demorei um bom tempo para gerar os hashes - já que os arquivos abrangem mais de 30 discos rígidos usando um programa de localização de arquivos duplicados é impossível - os nomes de arquivos contêm a unidade na qual o arquivo está armazenado.

É hora de liberar algum espaço em disco.

Eu quero excluir as linhas no arquivo de texto que têm um hash exclusivo que ocorre apenas uma vez.

Eu quero manter todas as linhas no arquivo de texto com um hash que ocorre duas vezes ou mais.

    
por speld_rwong 19.11.2016 / 21:28

1 resposta

2

você poderia fazer algo pior do que essa solução awk de duas passagens

awk 'NR == FNR{if ($2 in a) b[$2]++;a[$2]++; next}; $2 in b' file file

Na primeira passagem, use a matriz b para acompanhar os valores de hash encontrados mais de uma vez. Na segunda passagem, imprima um registro se o hash existir em b

Alternadamente

sort -k2,2 file | uniq -f 1 -D

que envolve classificar o arquivo pelo segundo campo e canalizar para uniq para imprimir todos os registros duplicados (ignorando o primeiro campo enquanto compara via -f 1 ). Dado o tamanho do seu arquivo de entrada, isso pode se tornar muito intensivo em recursos

    
por 19.11.2016 / 22:02