sed para procurar várias palavras e remover essas linhas

4

Eu tenho um arquivo mestre com mais de 50000 linhas e preciso remover cerca de 20000 linhas do arquivo real, pois usei o comando grep -vE , que mostra um erro como muitos argumentos.

Estou usando o comando sed para remover aqueles que estão usando o loop. Mas está demorando muito para ser removido, já que 20000% dos comandossed serão inicializados.

for i in 'cat 20000-words.txt'; do 
    sed -i -e "/$i/ d" 50000-lines.txt
done
    
por Sriharsha Kalluru 24.07.2014 / 16:00

2 respostas

9

Supondo que 20000-words.txt já esteja no formato de uma palavra por linha, faça:

grep -vFf 20000-words.txt 50000-lines.txt >50000-filtered-lines.txt

O argumento -f para grep diz para ler padrões de um arquivo, um padrão por linha, em vez de tomá-los como argumentos de linha de comando. O argumento -F para o grep informa que os padrões devem ser usados como sequências literais em vez de expressões regulares.

    
por 24.07.2014 / 16:06
1

Para fazer isso sem grep e assumir que você não tem linhas duplicadas, você pode:

$ sort 20000-words.txt 50000-lines.txt | uniq -u

ou:

$ comm -23 <(sort 50000-lines.txt) <(sort 20000-words.txt)
    
por 24.07.2014 / 16:29

Tags