Script para comparar dois arquivos

1. Script para comparar dois arquivos

Harley
shimpso

(usa Outra)

Enviado em 10/09/2013 - 14:57h

Olá pessoal !

Sou iniciante no linux.Por favor, me ajudem! Preciso fazer um script que lê e compara cada linha de dois arquivos texto. O script deve:

- retornar o número de linhas iguais nos dois arquivos
- retornar o número de linhas diferentes nos dois arquivos
- se a linha for diferente, imprimir essa linha em um outro arquivo texto no mesmo diretório


Agradeço desde já!


  


2. Re: Script para comparar dois arquivos

Alexandre Gonçalves Monteiro da Silva
alexandregms

(usa Ubuntu)

Enviado em 10/09/2013 - 17:22h

Colega, estamos aqui para ajudá-lo e não para resolver o seu problema do zero!
Uma dica é vc começar o script e vamos ajudá-lo no que precisar, mas pra isso precisamos que vc de o passo inicial .. :-)


3. Re: Script para comparar dois arquivos

Harley
shimpso

(usa Outra)

Enviado em 10/09/2013 - 18:34h

A principio pensei em usar o comando diff -s arq1 arq2 mas ele só imprime as linhas.

A lógica do script é simples ... mas não conheço os comandos nem toda a capacidade do shell.

A lógica seria mais ou menos assim:


se (linha_arq1 == linha_arq2)
contador_iguais += 1
senão
contador_diferentes += 1
criar outro arquivo txt no mesmo diretório com as linhas diferentes

retornar contador_iguais
retornar contador_diferentes


me corrijam se achar que a minha lógica nao faz sentido


4. Re: Script para comparar dois arquivos

Alexandre Gonçalves Monteiro da Silva
alexandregms

(usa Ubuntu)

Enviado em 11/09/2013 - 09:43h

Vc pode usar o diff, é um comando específico pra comparação.

Um exemplo, criei 2 arquivos:

 
[tux@MYSERVER tmp]$ cat 1.txt
UM
DOIS
TRES
QUATRO
CINCO

[tux@MYSERVER tmp]$ cat 2.txt
UM
DOIS
QUATRO
CINCO
SEIS



Comparando o arquivo 1 com o arquivo 2

 
[tux@MYSERVER tmp]$ diff 1.txt 2.txt
3d2
< TRES
5a5
> SEIS



Saiu do arquivo a palavra TRES e foi inserida a palavra SEIS.

Tendo isso vc pode filtrar a saída do diff com grep:

 
[tux@MYSERVER tmp]$ diff 1.txt 2.txt | grep ^\>
> SEIS


No exemplo acima pegamos somente a saída que inicia com ">", ou seja somente as palavras que foram acrescentadas no arquivo.

Para vc enviar as saída para um arquivo texto use:

 
[tux@MYSERVER tmp]$ diff 1.txt 2.txt | grep ^\> > linhas_acrescentadas.txt


Espero ter ajudado!


5. Re: Script para comparar dois arquivos

Harley
shimpso

(usa Outra)

Enviado em 12/09/2013 - 11:06h

Fiz o script como está abaixo, mas estou com um problema na hora de imprimir as linhas diferentes no outro arquivo. No output imprime um número muito maior de linhas que existem nos outros dois arquivos.

#! /bin/bash
# $1 = input1
# $2 = input2
# $3 = output

# total de linhas
tot=$(cat "$1" | wc -l)

# conta as linhas diferentes
t=$(tempfile)

diff -u "$1" "$2" > $t

dif=$(cat $t | grep ^+[^+] | wc -l)


#coloca as linhas diferentes em um output
cat $t | grep ^[+-][^+-] | cut -c 2- > "$3"

rm -f $t

#conta as linhas iguais
ok=$(($tot-$dif))

echo "total=$tot diferente=$dif iguais=$ok"






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts