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: Alfredo Casanova
Subject: Re: [shell-script] Comparar dois arquivos
Date: Fri, 19 Jul 2013 19:47:27 -0300

Estou pelo celular, não consigo ver o comm agora, mas ele funciona mesmo
com os arquivos sendo diferentes? Lembro que o único campo em comum nos
dois arquivos é o mac adress
Em 19/07/2013 17:51, "Leslie Watter" <address@hidden> escreveu:

> **
>
>
> Ae Julio, Lista,
>
> Dá pra fazer com o comm. Por exemplo
>
> comm -3 <(sort ARQ1) <(sort ARQ2)
>
> e vc terá as linhas que aparecem nos 2 arquivos.
>
> Agora colando as perguntas / respostas:
>
> 1) MAC adresses que existam apenas no primeiro arquivo (imprimindo a linha
> completa)
>
> *comm -1 <(sort ARQ1) <(sort ARQ2)*
>
> 2) MAC adresses que existam apenas no segundo arquivo (idem)
>
> *comm -2 <(sort ARQ1) <(sort ARQ2)*
>
> 3) Macs que ocorram nos dois arquivos.
>
> *comm -3 <(sort ARQ1) <(sort ARQ2)*
>
> Chegou até a combinar a pergunta com a opção do comm :D
>
> é uma mão na roda. O único detalhe é que ele precisa dos arquivos ordenados
> ;-)
>
> Da man page do comm:
> -----------
>
> NAME
> comm - compare two sorted files line by line
>
> SYNOPSIS
> comm [OPTION]... FILE1 FILE2
>
> DESCRIPTION
> Compare sorted files FILE1 and FILE2 line by line.
>
> With no options, produce three-column output. Column one
> contains lines unique to FILE1, column two contains lines unique to FILE2,
> and column three contains
> lines common to both files.
>
> -1 suppress column 1 (lines unique to FILE1)
>
> -2 suppress column 2 (lines unique to FILE2)
>
> -3 suppress column 3 (lines that appear in both files)
> ---------------------------------
>
> []s
>
> LEslie
>
> 2013/7/19 Julio C. Neves <address@hidden>
>
> > De antemão já vou falando: o cmd comm resolve esse problema, o problema é
> > que não lembro da sua sintaxe e seu man é incompleto. Peço a quem tiver
> > tempo de bisbilhotar na internet e achar um site que aborde legal este
> cmd
> > que o poste na lista. Por falar em lista, há muito tempo publicaram nela
> > algo muito parecido usando o comm.
> >
> > Vou da uma dica, usando o grep -f ARQ_DE_REGEXP ARQ_DE_DADOS Para isso
> > vamos dizer que seus arquivos são arq1 e arq2.
> >
> > # Criando 1 arquivo com as regexps dos mac de arq1
> > grep -Eo ^.{17} arq1 | sed 's/^/^/;s/$/$/' > arqer1
> > # Os registros de arqer1 estão da forma:
> > #+ ^hh:hh:hh:hh:hh:hh$, onde h é um hexadecimal
> > #+ Vamos fazer o mesmo para arq2
> > grep -Eo ^.{17} arq2 | sed 's/^/^/;s/$/$/' > arqer2
> > # Agora é só correr para o abraço
> > # MAC adresses que existam apenas no primeiro arquivo
> > grep -vf arqer2 arq1
> >
> > # MAC adresses que existam apenas no segundo arquivo
> > grep -vf arqer1 arq2
> >
> > # Macs que ocorram nos dois arquivos.
> > grep -f arqer1 arq2
> >
> > rm -i arqer1 arqer2
> >
> >
> > Abcs,
> > Julio
> > *@juliobash
> > *
> >
> >
> >
> > Em 19 de julho de 2013 11:42, Alfredo Casanova <address@hidden
> > >escreveu:
> >
> > > **
> > >
> > >
> > > 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]
> >
> >
> >
> > ------------------------------------
> >
> > ----------------------------------------------------------
> > Esta lista não admite a abordagem de outras liguagens de programação,
> como
> > perl, C etc. Quem insistir em não seguir esta regra será moderado sem
> > prévio aviso.
> > ----------------------------------------------------------
> > Sair da lista: address@hidden
> > ----------------------------------------------------------
> > Esta lista é moderada de acordo com o previsto em
> > http://www.listas-discussao.cjb.net
> > ----------------------------------------------------------
> > Servidor Newsgroup da lista: news.gmane.org
> > Grupo: gmane.org.user-groups.programming.shell.brazil
> >
> > Links do Yahoo! Grupos
> >
> >
> >
>
> --
> Leslie H. Watter
>
> [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]