Eliminar TODAS as linhas repetidas (não é pra deixar nenhuma) [RESOLVIDO]

1. Eliminar TODAS as linhas repetidas (não é pra deixar nenhuma) [RESOLVIDO]

Tiago Cavalcanti
tiagocavalcanti

(usa Debian)

Enviado em 23/12/2015 - 17:44h

Tenho 2 arquivos, arquivo1 e arquivo2, ambos possuem números ips em uma lista, preciso que todos os números que estejam tanto no arquivo1 como no arquivo2 sejam excluídos do arquivo 2.
Tentei usar o grep -v, tentei colocar dentro de um for, dentro de um while, nada deu certo, tentei o normal "grep -v arquivo1 arquivo2", mas por algum motivo não tenho saída. Quando uso no for aparentemente ele entende que estou buscando um diretório e me trás o resultado:
grep: 666.666.666.666: Arquivo ou diretório não encontrado

Toda ajuda será bem vinda.



  


2. MELHOR RESPOSTA

Paulo Dias
di4s

(usa XUbuntu)

Enviado em 26/12/2015 - 00:03h

Eu faria


for l in $(cat arq1); do sed -i "/$l/d" arq2 ; done


Linux Professional Institute - LPIC-1
Novell Certified Linux Administrator - CLA

http://twitter.com/p4ulodi4s
http://www.prminformatica.com.br/

3. RES: Eliminar TODAS as linhas repetidas (não é pra deixar nenhuma)

marcio mendes mendes
conectadohost

(usa XUbuntu)

Enviado em 23/12/2015 - 17:59h

Olá,
confundi num entendi

tiagocavalcanti escreveu:

Tenho 2 arquivos, arquivo1 e arquivo2, ambos possuem números ips em uma lista, preciso que todos os números que estejam tanto no arquivo1 como no arquivo2 sejam excluídos do arquivo 2.
Tentei usar o grep -v, tentei colocar dentro de um for, dentro de um while, nada deu certo, tentei o normal "grep -v arquivo1 arquivo2", mas por algum motivo não tenho saída. Quando uso no for aparentemente ele entende que estou buscando um diretório e me trás o resultado:
grep: 666.666.666.666: Arquivo ou diretório não encontrado

Toda ajuda será bem vinda.


se você tem 2 arquivos com os mesmos números então você vai deletar tudo, ou seja não vai sobrar nada.
agora se você tem uma terceira lista com os números que você quer deletar das outras 2 listas ai sim você pode
usar uma lista de comparação para deletar com o seed ou grep.

especifique um pouco mais para que eu possa entender, pois acho que posso ajuda-lo

---> A arte de programar consiste na arte de organizar e dominar a complexidade.
---> Dijkstra <---


4. Re: Eliminar TODAS as linhas repetidas (não é pra deixar nenhuma)

Arthur J. Hoch
Arthur_Hoch

(usa FreeBSD)

Enviado em 23/12/2015 - 19:54h

se você tem 2 arquivos com os mesmos números então você vai deletar tudo, ou seja não vai sobrar nada.
agora se você tem uma terceira lista com os números que você quer deletar das outras 2 listas ai sim você pode
usar uma lista de comparação para deletar com o seed ou grep.


Acho que sei o que ele quer, tipo ele deve ter isso aqui:

Arq1
1.1.1.1
2.2.2.2
3.3.3.3
9.9.9.9

e

Arq2
1.1.1.1
2.2.2.2
3.3.3.3
8.8.8.8
9.9.9.9

Então todos os ips do Arq2 devem ser deletados, menos o 8.8.8.8, pois não tem no Arq1.





5. Re: Eliminar TODAS as linhas repetidas (não é pra deixar nenhuma)

Arthur J. Hoch
Arthur_Hoch

(usa FreeBSD)

Enviado em 23/12/2015 - 20:19h


package auto;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.LinkedList;
import java.util.List;

public class Auto {

public static void main(String[] args) throws IOException {

List<String> listaDiferentes = new LinkedList<>();

List<String> listaArquivo1 = getListaArquivo("/home/arthurhoch/test/ar1");
List<String> listaArquivo2 = getListaArquivo("/home/arthurhoch/test/ar2");

for (String linha : listaArquivo2) {
if(!listaArquivo1.contains(linha))
listaDiferentes.add(linha);
}

setListaArquivo("/home/arthurhoch/test/ar2", listaDiferentes);

}

public static void setListaArquivo(String localDoArquivo, List<String> listaDiferente) throws IOException{
BufferedWriter bw = new BufferedWriter(new FileWriter(localDoArquivo));

String novoArquivo = new String();

for (String linha : listaDiferente) {
novoArquivo += linha + "\n";
}

bw.write(novoArquivo);
bw.flush();
bw.close();

}

public static List<String> getListaArquivo(String localDoArquivo) throws FileNotFoundException, IOException{
List<String> lista = new LinkedList<>();
BufferedReader br = new BufferedReader(new FileReader(localDoArquivo));

String linha = new String();

while( (linha = br.readLine()) !=null )
lista.add(linha);

br.close();

return lista;
}
}



6. Re: Eliminar TODAS as linhas repetidas (não é pra deixar nenhuma) [RESOLVIDO]

Arthur J. Hoch
Arthur_Hoch

(usa FreeBSD)

Enviado em 23/12/2015 - 20:52h


#!/usr/bin/env

def getListaArquivo(path):
lista = []
with open(path) as f:
lista += f.readlines()

return lista

def setListaArquivo(path, lista):
f = open(path, 'w')
f.write(lista)
f.close()

listaArquivo1 = getListaArquivo('/home/arthurhoch/test/ar1')
listaArquivo2 = getListaArquivo('/home/arthurhoch/test/ar2')

listaDiferentes = ""

for x in range(len(listaArquivo2)):
contain = False
for y in range(len(listaArquivo1)):
if listaArquivo1[y] == listaArquivo2[x]:
contain = True

if contain == False:
listaDiferentes += listaArquivo2[x]

setListaArquivo('/home/arthurhoch/test/ar2', listaDiferentes)



7. RESP:

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 23/12/2015 - 20:56h

Boa noite.
Temos:
cat ARQ01
1.1.1.1
2.2.2.2
3.3.3.3
5.5.5.5
9.9.9.9
E

cat ARQ02
1.1.1.1
2.2.2.2
3.3.3.3
7.7.7.7
8.8.8.8
9.9.9.9
11.11.11.11

diff ARQ01 ARQ02 | sed 1d |sed 's/^< \|^> //' | sed '/---/d' | sed '/.[a-z]./d'
5.5.5.5
7.7.7.7
8.8.8.8
11.11.11.11

OU

diff ARQ01 ARQ02 | egrep -io '([0-9]{1,3}\.){3}[0-9]{1,3}'
5.5.5.5
7.7.7.7
8.8.8.8
11.11.11.11

FEITO!
PS:
A REGEX do IP foi feita na correria....

Att.:
Marcelo Oliver

OBS.:
Se gostar da simplicidade e eficiência . . .
Qualifique como melhor resposta . . . :)

FELIZ NATAL P/ TODOS






8. Re: Eliminar TODAS as linhas repetidas (não é pra deixar nenhuma)

Wellingthon Dias Queiroz - @tonyhts
tonyhts

(usa Arch Linux)

Enviado em 25/12/2015 - 22:01h

Olá,

Eu faria assim:

cat arq1 arq2 | sort | uniq -u > arq_final 



EDIT: dei um simplificada
abs
---
Eu Acredito, que ás vezes são as pessoas que ninguém espera nada que fazem as coisas que ninguém consegue imaginar.

--- Mestre dos Mestres - Alan Turing ---


9. Re: Eliminar TODAS as linhas repetidas (não é pra deixar nenhuma) [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 26/12/2015 - 00:18h

tonyhts escreveu:

Olá,

Eu faria assim:

cat arq1 arq2 > arq_total
cat arq_total | sort | uniq -u > arq_final


abs
---
Eu Acredito, que ás vezes são as pessoas que ninguém espera nada que fazem as coisas que ninguém consegue imaginar.

--- Mestre dos Mestres - Alan Turing ---


Existem dois arquivos: o de trabalho e o das chaves de exclusão.
Se o arquivo das chaves tem uma chave que não está no arquivo de trabalho, ela será acrescida na saída do comando cat.
E por não ser repetida o comando uniq não a excluirá. É isso?

----------------------------------------------------------------------------------------------------------------
# apt-get purge systemd

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



10. Re: Eliminar TODAS as linhas repetidas (não é pra deixar nenhuma) [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 26/12/2015 - 00:19h

Arthur_Hoch escreveu:


#!/usr/bin/env

def getListaArquivo(path):
lista = []
with open(path) as f:
lista += f.readlines()

return lista

def setListaArquivo(path, lista):
f = open(path, 'w')
f.write(lista)
f.close()

listaArquivo1 = getListaArquivo('/home/arthurhoch/test/ar1')
listaArquivo2 = getListaArquivo('/home/arthurhoch/test/ar2')

listaDiferentes = ""

for x in range(len(listaArquivo2)):
contain = False
for y in range(len(listaArquivo1)):
if listaArquivo1[y] == listaArquivo2[x]:
contain = True

if contain == False:
listaDiferentes += listaArquivo2[x]

setListaArquivo('/home/arthurhoch/test/ar2', listaDiferentes)


Só faltou o interpretador na she-bang. É Python, né?

----------------------------------------------------------------------------------------------------------------
# apt-get purge systemd

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



11. Re: Eliminar TODAS as linhas repetidas (não é pra deixar nenhuma)

Arthur J. Hoch
Arthur_Hoch

(usa FreeBSD)

Enviado em 26/12/2015 - 11:08h

listeiro_037 escreveu:
Só faltou o interpretador na she-bang. É Python, né?


É sim.

Acredito que ele nem vai executar isso, fiz só pela zoeira esperando alguém dizer, "Olha, fiz só em uma linha!!! suhsuahua".


12. Re: Eliminar TODAS as linhas repetidas (não é pra deixar nenhuma)

Wellingthon Dias Queiroz - @tonyhts
tonyhts

(usa Arch Linux)

Enviado em 26/12/2015 - 11:26h

listeiro_037 escreveu:

tonyhts escreveu:

Olá,

Eu faria assim:

cat arq1 arq2 | sort | uniq -u > arq_final 



Existem dois arquivos: o de trabalho e o das chaves de exclusão.
Se o arquivo das chaves tem uma chave que não está no arquivo de trabalho, ela será acrescida na saída do comando cat.
E por não ser repetida o comando uniq não a excluirá. É isso?



Bom di mestre. Exato, o uniq com o parametro -u só mantém as linhas unicas. Ex:

Arq1
aaa
bbb
ccc
ddd
eee

Arq2
aaa
ccc
eee

Arq_final ficaria assim:
bbb
ddd

Abs

---
Eu Acredito, que ás vezes são as pessoas que ninguém espera nada que fazem as coisas que ninguém consegue imaginar.

--- Mestre dos Mestres - Alan Turing ---



01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts