Preciso saber como fazer que o comando sed -e '33d;76d;546d' Arquivo_Alvo.txt executar com NOT(!). [

1. Preciso saber como fazer que o comando sed -e '33d;76d;546d' Arquivo_Alvo.txt executar com NOT(!). [

Mestre Kame
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?



  


2. Re: Preciso saber como fazer que o comando sed -e '33d;76d;546d' Arquivo_Alvo.txt executar com NOT(!). [

Perfil removido
removido

(usa Nenhuma)

Enviado em 08/07/2016 - 19:55h

Pesquisei pela internet e parece-me que não dá mesmo.
Uma solução seria perguntar na lista sed-br do Yahoo! e que inclusive o Aurélio e alguns outros feras estão por lá.

----------------------------------------------------------------------------------------------------------------
Nem direita, nem esquerda. Quando se trata de corrupção o Brasil é ambidestro.
(anônimo)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



3. Re: Preciso saber como fazer que o comando sed -e '33d;76d;546d' Arquivo_Alvo.txt executar com NOT(!). [

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 08/07/2016 - 21:24h

mlgrassi escreveu:

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?


Boa noite.
Dica para a duvida:
"como fazer para este comando se tornar dinâmico baseando-se na quantidade de parâmetros contidos no arquivo LINHAS_A_EXCLUIR.TXT?"

LAE=$(sed 's/$/d\;/' LINHAS_A_EXCLUIR.TXT |xargs|sed 's/ //g') 

sed -i.BKP "$LAE" ARQUIVO_ORIGINAL.TXT 

O comando acima, GERA o ARQUIVO_ORIGINAL.TXT.BKP, exclui as linhas citadas em LINHAS_A_EXCLUIR.TXT de ARQUIVO_ORIGINAL.TXT

Para "PEGAR" o conteúdo das LINHAS que foram EXCLUÍDAS
diff ARQUIVO_ORIGINAL.TXT ARQUIVO_ORIGINAL.TXT.BKP|egrep '>' | sed 's/^..//' >> LINHAS_EXCLUIDAS.TXT 


att.:
marcelo oliver




4. Re: Preciso saber como fazer que o comando sed -e '33d;76d;546d' Arquivo_Alvo.txt executar com NOT(!). [

Mestre Kame
mlgrassi

(usa Debian)

Enviado em 08/07/2016 - 23:22h

Show de bola amigo. Me ajudou em 100%.

Um grande abraço.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts