shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Comparar dois arquivos


From: Enio Onodera
Subject: Re: [shell-script] Comparar dois arquivos
Date: Fri, 19 Jul 2013 08:19:15 -0700 (PDT)

Verifica se não tem mac repetido na mesma tabela.
Tá subtraindo 340 de a.csv (que é a quantidade correta de macs repetidos entre 
as tabelas) e 396 de b.csv (onde talvez existam mac repetidos na mesma tabela, 
aumentando o número de linhas subtraidas).
Talvez filtrar as tabelas com sort e uniq te ajude a visualizar isso.


Atte,
Enio Onodera


________________________________
 De: Alfredo Casanova <address@hidden>
Para: address@hidden 
Enviadas: Sexta-feira, 19 de Julho de 2013 11:42
Assunto: [shell-script] Comparar dois arquivos
 


  
Galera, tenho 2 arquivos CSV separados por tabulação, que seguem regras de
formação distintas. A única semelhança é que ambos tem como primeiro campo
o MAC ADDRESS de várias máquinas.

Preciso comparar esses dois arquivos e gerar 3 listas:

1) MAC adresses que existam apenas no primeiro arquivo (imprimindo a linha
completa)

2) MAC adresses que existam apenas no segundo arquivo (idem)

3) Macs que ocorram nos dois arquivos.

fiz o seguinte:

(disponíve em: http://pastie.org/8155816)

#!/bin/bash
# organizar argumentos em um array
args=( $* )

# retirar os CRLF
dos2unix ${args[@]}

#excluir a primeira linha dos dois arquivos
sed -i '1d' ${args[0]}
sed -i '1d' ${args[1]}

# isolar apenas as linhas que comecem com um mac address, afim de evitar
erros
grep -Ei '^([0-9a-f]{2}-){5}[0-9a-f]{2}' ${args[0]} > .tmp; mv .tmp
${args[0]}
grep -Ei '^([0-9a-f]{2}-){5}[0-9a-f]{2}' ${args[1]} > .tmp; mv .tmp
${args[1]}

for i in 0 1
do
# pegar todos os MACS do arquivo e organiza-los em uma só linha, separando
por um OU
# para posterior utilizacao em um grep -E
var=$(grep -Eio '([0-9a-f]{2}-){5}[0-9a-f]{2}' ${args[$i]} | sed
':a;$!N;s/\n/\|/;ta;')

[ $i -eq 0 ] && { grep -E "$var" ${args[1]} >>
PresentesEm${args[0]}E${args[1]};
grep -Ev "$var" ${args[1]} > Apenasem${args[1]}; } || grep -Ev "$var"
${args[0]} > Apenasem${args[0]};
done

mas no final a contagem de linhas nao bate:

$ wc -l a.csv b.csv
2395 a.csv
3019 b.csv
5414 total

$ wc -l Apenasema.csv Apenasemb.csv PresentesEma.csvEb.csv
2055 Apenasema.csv
2623 Apenasemb.csv
396 PresentesEma.csvEb.csv
5074 total

Não sei se estou com algum furo na lógica que não consegui ver... alguma
luz?

-- 
[]'s
Alfredo Casanova
Linux User #228230
msn: address@hidden
tel: +55 61 9655 9619

[As partes desta mensagem que não continham texto foram removidas]


 

[As partes desta mensagem que não continham texto foram removidas]



reply via email to

[Prev in Thread] Current Thread [Next in Thread]