mlgrassi
(usa Debian)
Enviado em 07/07/2016 - 17:30h
Prezados,
Tenho um problema que preciso solucionar e tenho apenas metade da solução para o mesmo. Gostaria de saber se podem me auxiliar. Assim segue abaixo:
Necessito implementar um script que faça o seguinte:
1) Leia um arquivo denominado LINHAS_A_EXCLUIR.TXT. Este arquivo irá conter várias linhas e apenas uma coluna.
-Cada linha desse arquivo contém, aleatoriamente, porém em ordem crescente, o número de linha de um outro arquivo denominado ARQUIVO_ORIGINAL.TXT
-Esses números de linha contidos em LINHAS_A_EXCLUIR.TXT, serão utilizados como parâmetro para o comando sed, o qual irá utilizar como endereçamento sob o arquivo denominado ARQUIVO_ORIGINAL.TXT.
-Assim o sed deverá receber vários parâmetros simultaneamente, sendo estes parâmetros o endereçamento das linhas contidas em ARQUIVO_ORIGINAL.TXT.
-O sed utilizará isto para excluir as linhas endereçadas de ARQUIVO_ORIGINAL.TXT
Exemplo meramente ilustrativo. Conteúdo do arquivo LINHAS_A_EXCLUIR.TXT (contém o número de linha a ser eliminada):
5
32
54
277
1024
...
(e por aí vai)
Exemplo meramente ilustrativo. Conteúdo de ARQUIVO_ORIGINAL.TXT:
Conteúdo ABCD xxxxxxxxxxx (Esta é a linha número 5)
...
Conteúdo EFGH yyyyyyyyy (Esta é a linha número 32)
...
Conteúdo IJKLM zzzzzzzzzzz (Esta é a linha número 1024)
...
(E daí pra diante)
2) O conteúdo de cada linha que SERÁ excluída de ARQUIVO_ORIGINAL.TXT, deverá antes, ser armazenado em um outro arquivo txt denominado LINHAS_EXCLUIDAS.TXT.
3) O conteúdo de cada linha que NÃO será excluída de ARQUIVO_ORIGINAL.TXT, deverá ser, antes, armazenado em um outro arquivo txt denominado LINHAS.TXT
O sed deverá realizar a exclusão de todas as linhas simultaneamente. Até onde sei, pode ser utilizado o sed da seguinte forma:
sed -e '[linha1_a_excluir]d;[linha2_a_excluir]d;[linhaN_a_excluir]d' arquivo_alvo
Ex.
sed -e '5d;32d;54d;277d;1024d' ARQUIVO_ORIGINAL.TXT > LINHAS.TXT
O comando acima funciona e já resolveria parte de meu problema, pois geraria o arquivo com todas as linhas NÃO excluídas de ARQUIVO_ORIGINAL.TXT. No entanto, temos um problema aí, como fazer para este comando se tornar dinâmico baseando-se na quantidade de parâmetros contidos no arquivo LINHAS_A_EXCLUIR.TXT?
É possível aplicar NOT ao sed utilizando a sintaxe acima de modo a NÃO exibir as linhas utilizadas como endereçamento? Já testei o seguinte e vi que não funciona:
sed -e '5 ! d;32 ! d;54 ! d;277 ! d;1024 ! d' ARQUIVO_ORIGINAL.TXT > LINHAS_EXCLUIDAS.TXT. Alguma ideia de como fazer isso?
Caso haja um método melhor para solucionar meu problema, qual seria?