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

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

Comparar dois arquivos


From: Alfredo Casanova
Subject: Comparar dois arquivos
Date: Fri, 19 Jul 2013 11:42:40 -0300

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]



reply via email to

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