Como remover linhas idênticas sinalizadas em arquivos de texto

1

Eu quero remover linhas idênticas selecionadas misturadas no arquivo de texto B. As linhas idênticas são marcadas com% mark no início da linha no arquivo A. Como conseguir isso através da linha de comando.

por exemplo:

file A contents AAA - 789 BBB - 456 % CCC - 980

file B contents AAA - 789 CCC - 980 BBB - 456

deseja remover o CCC - 980 no arquivo B.

    
por Ramaprakasha 14.07.2014 / 07:53

1 resposta

2

Use os comandos em um terminal

sed -n '/^%/p' fileA.txt | awk '{print substr($0,3)}' > tmp.txt
grep fileB.txt -vf tmp.txt > modified_file.txt
rm tmp.txt

O arquivo modified_file.txt contém os resultados desejados. você pode usar esses comandos em um script de shell também.

Como funciona:

  • sed -n '/^%/p' fileA.txt output é, % CCC - 980
  • sed -n '/^%/p' fileA.txt | awk '{print substr($0,3)}' produz CCC - 980 , que você deseja remover. Eu o armazenei em tmp.txt usando o redirecionamento para que possa trabalhar com várias linhas.
  • grep fileB.txt -vf tmp.txt fornece a parte do arquivo B que não está contida em tmp.txt . Finalmente, armazenou em modified_file.txt

Método inteligente alternativo sugerido por AvinashRaj :

awk -v var=$(awk '$1=="%"{print $2}' fileA.txt) '$1==var{next;}1' fileB.txt
    
por souravc 14.07.2014 / 08:39