Remover varias linhas de um arquivo [RESOLVIDO]

1. Remover varias linhas de um arquivo [RESOLVIDO]

Tonin de Rosso Bolzan
tonybolzan

(usa Ubuntu)

Enviado em 21/04/2008 - 23:45h

Olá... Pessoal...Eu estou com um problemão(pelo menos pra mim) eu preciso remover 736 palavras que estão num arquivo-1 de um determinado arquivo-2 que contém 16531 palavras... As palavras dos arquivo-1 e 2 estão dispostas uma em cada linha...
Ex.:
arquivo-1
___palavra-c
___palavra-d
___palavra-e

arquivo-2
___palavra-a
___palavra-b
___palavra-c
___palavra-d
___palavra-e
___palavra-f

Resultado que pretendo é:
___palavra-a
___palavra-b
___palavra-f

Se for com poucas palavras ta facil o problema é que são 736 palavras.
Tentei fazer assim (eu sou fraco em sed, nem sei se com ele eu consigo faze isso).
-----------------------------------------------
for i in `cat arquivo-1`
> do
> sed /$i/d arquivo-2
> done
-----------------------------------------------
Não deu erro nenhum, mas também não mudou nada o arquivo-2 (não apagou nenhuma linha).

Obrigado pela atenção


  


2. Re: Remover varias linhas de um arquivo [RESOLVIDO]

Sandro Marcell
SMarcell

(usa Slackware)

Enviado em 23/04/2008 - 08:18h

Faça:

$ cat arquivo-1 arquivo-2 | sort | uniq -u > saída.txt

Onde:
cat: Concatena (junta) o arquivo-1 e o arquivo-2
sort: Ordena seqüencialmelte as linhas duplicadas
uniq: Com a opção '-u' não imprime na saída padrão as linhas duplicadas.

Você também pode utilizar a substituição de processos, veja:

$ uniq -u <(sort <(cat arquivo-1 arquivo-2)) > saída.txt


3. Re: Remover varias linhas de um arquivo [RESOLVIDO]

Tonin de Rosso Bolzan
tonybolzan

(usa Ubuntu)

Enviado em 23/04/2008 - 13:10h

Fazendo isso eu não vou tirar as linhas que eu quero.
O arquivo vai ficar o msm :)

---------------------------------------------------------------
Mas valeu...
Só que eu consegui depois de muuuuuito pensar, fiz o seguinte:

Criei um script sed da seguinte forma:

#Isso adiciona os comandos no inicio e no final de cada linha
sed 's/[^ ][^ ]*/s\/&\/---\/g/g' arquivo-1 > arquivo-1.new

#Isso adiciona o cabeçalho "#!/bin/sed -f" no script
sed -e '1i\' -e '#!/bin/sed -f' arquivo-1.new > arquivo-1.sh

#O script arquivo-1.sh fica assim:
-----------------------------
#!/bin/sed -f
s/___palavra-c/---/g
s/___palavra-d/---/g
s/___palavra-e/---/g
-----------------------------

#Dou a permição de execução no script
chmod 777 arquivo-1.sh

#Executo o script
./arquivo-1.sh arquivo-2 > arquivo-2.new

#Deleto as entradas --- criadas no arquivo
sed '/---/d' arquivo-2.new > arquivo-resultado

#Deleto os aruivos temporarios
rm *.new
rm *.sh

#Ufffaaa!!!! Isso deu muita dor de cabeça. :)

Se alguem tiver uma idéia melhor, não deixe de comentar.


4. Re: Remover varias linhas de um arquivo [RESOLVIDO]

Sandro Marcell
SMarcell

(usa Slackware)

Enviado em 24/04/2008 - 08:18h

-------------
Fazendo isso eu não vou tirar as linhas que eu quero.
O arquivo vai ficar o msm :)
-------------

Será?

$ cat arq1
linha um
linha dois

$ cat arq2
linha um
linha dois
linha três
linha quatro

$ cat arq1 arq2 | sort | uniq -u > saída.txt
ou
$ uniq -u <(sort <(cat arq1 arq2)) > saída.txt

$ cat saída.txt
linha três
linha quatro




5. Re: Remover varias linhas de um arquivo [RESOLVIDO]

Tonin de Rosso Bolzan
tonybolzan

(usa Ubuntu)

Enviado em 30/04/2008 - 13:53h

Caaaara....
Nem sei o que fala...
Fiz do geito mais dificil
Acho que é a mania de usar o "sed" pra tudo mesmo.
Acontece. Não tinha lembrado do "-u" do uniq

Mas mesmo assim o que eu fiz fincionou (apesar do grande esforço).

Agradeço muito mesmo pela ajuda.
T+

-----------------------------------
EDITADO
OPA... Descobri que o "uniq -u" não altera o conteudo do arquivo se ele tem muitas linhas (nesse caso + de 16000).
É como não usar ele, a saida é a mesma usando ele e sem usar ele.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts