Comparar números em dois arquivos diferentes [RESOLVIDO]

1. Comparar números em dois arquivos diferentes [RESOLVIDO]

Harley
shimpso

(usa Outra)

Enviado em 02/12/2013 - 08:34h

Olá pessoal !

Tenho dois arquivos: arquivo1.txt e arquivo2.txt.
Cada arquivo tem a mesma quantidade de linhas e cada linha possui um número float.

arquivo1.txt
1.0000
1.3567
0.9867
0.7845
:
:

arquivo2.txt
1.0083
0.7846
0.6547
0.2343
:
:


Preciso comparar cada linha dos arquivos e verificar se o número do arquivo1.txt é maior, menor ou igual ao do arquivo2.txt.

A princípio pensei em usar o comando diff mas ele tratará cada linha como uma string e não como um número. Então acho que será necessário fazer um script.

Alguém tem alguma ideia de como me ajudar ?!




  


2. Re: Comparar números em dois arquivos diferentes [RESOLVIDO]

Carlos Alberto Mazzer
cmazzer

(usa Ubuntu)

Enviado em 02/12/2013 - 09:57h

Para facilitar sua vida você pode utilizar linguagens de programação um pouco mais completas que somente o shell script.

Ex. Python

Ai você lê o arquivo 1 e manda para um array, lê o arquivo 2 em outro array. Ai você vai comparar linha a linha dos arrays.

Mas não existe "receita de bolo" para isso. Tem que programar, conhecer de lógica de programação.

Att,


3. Re: Comparar números em dois arquivos diferentes [RESOLVIDO]

Harley
shimpso

(usa Outra)

Enviado em 02/12/2013 - 11:14h



Gostaria de usar o shell ou PHP porque não conheço as outras linguagens e estou com problema de tempo. Preciso fazer isso para os próximos 5 dias.

Alguém pode me dar uma dica usando o shell ou PHP ?


4. Re: Comparar números em dois arquivos diferentes [RESOLVIDO]

Luis R. C. Silva
luisrcs

(usa Linux Mint)

Enviado em 02/12/2013 - 13:02h

shimpso escreveu:

Olá pessoal !

Tenho dois arquivos: arquivo1.txt e arquivo2.txt.
Cada arquivo tem a mesma quantidade de linhas e cada linha possui um número float.

arquivo1.txt
1.0000
1.3567
0.9867
0.7845
:
:

arquivo2.txt
1.0083
0.7846
0.6547
0.2343
:
:


Preciso comparar cada linha dos arquivos e verificar se o número do arquivo1.txt é maior, menor ou igual ao do arquivo2.txt.

A princípio pensei em usar o comando diff mas ele tratará cada linha como uma string e não como um número. Então acho que será necessário fazer um script.

Alguém tem alguma ideia de como me ajudar ?!



Use o bc:


while read line1
do
while read line2
do
a=$line1-$line2 | bc
if [ $a -lt 0 ]; then
echo "1º menor que 2º"
elif [ $a -gt 0 ]; then
echo "1º maior que 2º"
elif [ $a -eq 0 ]; then
echo "1º igual a 2"
fi
done < arquivo2.txt
done < arquivo1.txt



5. Re: Comparar números em dois arquivos diferentes [RESOLVIDO]

Harley
shimpso

(usa Outra)

Enviado em 03/12/2013 - 08:59h

rei_astro escreveu:

shimpso escreveu:

Olá pessoal !

Tenho dois arquivos: arquivo1.txt e arquivo2.txt.
Cada arquivo tem a mesma quantidade de linhas e cada linha possui um número float.

arquivo1.txt
1.0000
1.3567
0.9867
0.7845
:
:

arquivo2.txt
1.0083
0.7846
0.6547
0.2343
:
:


Preciso comparar cada linha dos arquivos e verificar se o número do arquivo1.txt é maior, menor ou igual ao do arquivo2.txt.

A princípio pensei em usar o comando diff mas ele tratará cada linha como uma string e não como um número. Então acho que será necessário fazer um script.

Alguém tem alguma ideia de como me ajudar ?!



Use o bc:


while read line1
do
while read line2
do
a=$line1-$line2 | bc
if [ $a -lt 0 ]; then
echo "1º menor que 2º"
elif [ $a -gt 0 ]; then
echo "1º maior que 2º"
elif [ $a -eq 0 ]; then
echo "1º igual a 2"
fi
done < arquivo2.txt
done < arquivo1.txt




tem certeza que a sintexe está correta ? Aqui não funcionou.






6. Re: Comparar números em dois arquivos diferentes [RESOLVIDO]

Fernando
phoemur

(usa Debian)

Enviado em 03/12/2013 - 09:54h

O bash não tem suporte para números de ponto flutuante, somente inteiros...
Veja por exemplo:


phoemur ~ $ echo $(( 2 + 2 ))
4
phoemur ~ $ echo $(( 1.5 + 1.5 ))
bash: 1.5 + 1.5 : syntax error: invalid arithmetic operator (error token is ".5 + 1.5 ")


Sempre que você precisar de usar operações com números em ponto flutuante você vai precisar usar outras ferramentas, como o bc que já foi citado anteriormente...

Contudo, se quiser apenas comparar, não vejo problema em tradar as linhas como strings pois o resultado vai ser o mesmo...


diff -y arquivo1.txt arquivo2.txt


phoemur ~/bash/teste $ diff -y -ZE arquivo1.txt arquivo2.txt
1.0000 | 1.0083
1.3567 | 0.7846
0.9867 | 0.6547
0.5555 0.5555
0.7845 | 0.2343


Agora se quiser comparar linha por linha e ver as relações ( maior menor ou igual ), terá que converter pra números mesmo.
Note que tive que usar o bc pra tratar dos números em ponto flutuante e fazer as comparações:

#!/bin/bash

exec 3< arquivo1.txt
exec 4< arquivo2.txt

while read LINE1 <&3 && read LINE2 <&4
do
if [ "$( echo "$LINE1 == $LINE2" | bc)" -eq 1 ]; then echo "$LINE1 Igual $LINE2"; fi
if [ "$( echo "$LINE1 > $LINE2" | bc)" -eq 1 ]; then echo "$LINE1 Maior $LINE2"; fi
if [ "$( echo "$LINE1 < $LINE2" | bc)" -eq 1 ]; then echo "$LINE1 Menor $LINE2"; fi
done

exec 3<&-
exec 4<&-

** Note que no bc 1 é verdadeiro e 0 é falso

Saída:

phoemur ~/bash/teste $ ./teste.sh
1.0000 Menor 1.0083
1.3567 Maior 0.7846
0.9867 Maior 0.6547
0.5555 Igual 0.5555
0.7845 Maior 0.2343


Acho que deu pra perceber o tanto de coisas que devemos contornar pra fazer esse tipo de coisa em shell, por isso que o amigo falou que uma linguagem de programação como Python seria mais fácil

Um abraço


7. Re: Comparar números em dois arquivos diferentes [RESOLVIDO]

Luis R. C. Silva
luisrcs

(usa Linux Mint)

Enviado em 03/12/2013 - 10:33h

shimpso escreveu:

rei_astro escreveu:

shimpso escreveu:

Olá pessoal !

Tenho dois arquivos: arquivo1.txt e arquivo2.txt.
Cada arquivo tem a mesma quantidade de linhas e cada linha possui um número float.

arquivo1.txt
1.0000
1.3567
0.9867
0.7845
:
:

arquivo2.txt
1.0083
0.7846
0.6547
0.2343
:
:


Preciso comparar cada linha dos arquivos e verificar se o número do arquivo1.txt é maior, menor ou igual ao do arquivo2.txt.

A princípio pensei em usar o comando diff mas ele tratará cada linha como uma string e não como um número. Então acho que será necessário fazer um script.

Alguém tem alguma ideia de como me ajudar ?!



Use o bc:


while read line1
do
while read line2
do
a=$line1-$line2 | bc
if [ $a -lt 0 ]; then
echo "1º menor que 2º"
elif [ $a -gt 0 ]; then
echo "1º maior que 2º"
elif [ $a -eq 0 ]; then
echo "1º igual a 2"
fi
done < arquivo2.txt
done < arquivo1.txt




tem certeza que a sintexe está correta ? Aqui não funcionou.





Tem razão. Seria assim:

[code]
#!/bin/bash

while read line1
do
while read line2
do
a=$(echo $line1-$line2 | bc)
if [ "$a" -lt 0 ]; then
echo "1º menor que 2º"
elif [ "$a" -gt 0 ]; then
echo "1º maior que 2º"
elif [ "$a" -eq 0 ]; then
echo "1º igual a 2"
fi
done < arquivo2.txt
done < arquivo1.txt


8. Re: Comparar números em dois arquivos diferentes [RESOLVIDO]

Luis R. C. Silva
luisrcs

(usa Linux Mint)

Enviado em 03/12/2013 - 11:03h

O problema é que o if só serve para números inteiros. É melhor fazer em PHP:


<?php
$arq1 = fopen('arquivo1.txt', 'r');
$arq2 = fopen('arquivo2.txt', 'r');
while(!feof($arq1)){
while(!feof($arq2)){
$linha1 = (float) fgets($arq1);
$linha2 = (float) fgets($arq2);
if($linha1 < $linha2){
print("linha1 é menor\n");
}
elseif($linha1 > $linha2){
print("linha1 é maior\n");
}
elseif($linha1 == $linha2){
print("as linhas são iguais\n");
}
}
}
fclose($arq1);
fclose($arq2);
?>


Só que a última linha vai ser sempre em branco. Depois de todos as linhas preenchidas.


9. Re: Comparar números em dois arquivos diferentes [RESOLVIDO]

Harley
shimpso

(usa Outra)

Enviado em 03/12/2013 - 11:56h


Funcionou !!! =)

Obrigado pessoal! Vcs são demais!


10. Re: Comparar números em dois arquivos diferentes [RESOLVIDO]

Fernando
phoemur

(usa Debian)

Enviado em 03/12/2013 - 12:09h

Ou Python


#!/bin/env python

with open('arquivo1.txt', mode='r') as file1:
with open('arquivo2.txt', mode='r') as file2:
linha1 = [ float(elem) for elem in file1.readlines() ]
linha2 = [ float(elem) for elem in file2.readlines() ]

for i in range(len(linha1)):
if linha1[i] == linha2[i]:
print('{} igual a {}'.format(linha1[i], linha2[i]))
elif linha1[i] > linha2[i]:
print('{} maior que {}'.format(linha1[i], linha2[i]))
elif linha1[i] < linha2[i]:
print('{} menor que {}'.format(linha1[i], linha2[i]))



phoemur ~/bash/teste $ ./teste.py
1.0 menor que 1.0083
1.3567 maior que 0.7846
0.9867 maior que 0.6547
0.5555 igual a 0.5555
0.7845 maior que 0.2343


Python é tão ou mais fácil que shellscript, sendo muito poderoso...


11. Re: Comparar números em dois arquivos diferentes [RESOLVIDO]

Luis R. C. Silva
luisrcs

(usa Linux Mint)

Enviado em 03/12/2013 - 12:19h

shimpso escreveu:


Funcionou !!! =)

Obrigado pessoal! Vcs são demais!


Então marque a melhor resposta.


12. Re: Comparar números em dois arquivos diferentes [RESOLVIDO]

Luis R. C. Silva
luisrcs

(usa Linux Mint)

Enviado em 03/12/2013 - 17:59h

phoemur escreveu:

Ou Python


#!/bin/env python

with open('arquivo1.txt', mode='r') as file1:
with open('arquivo2.txt', mode='r') as file2:
linha1 = [ float(elem) for elem in file1.readlines() ]
linha2 = [ float(elem) for elem in file2.readlines() ]

for i in range(len(linha1)):
if linha1[i] == linha2[i]:
print('{} igual a {}'.format(linha1[i], linha2[i]))
elif linha1[i] > linha2[i]:
print('{} maior que {}'.format(linha1[i], linha2[i]))
elif linha1[i] < linha2[i]:
print('{} menor que {}'.format(linha1[i], linha2[i]))



phoemur ~/bash/teste $ ./teste.py
1.0 menor que 1.0083
1.3567 maior que 0.7846
0.9867 maior que 0.6547
0.5555 igual a 0.5555
0.7845 maior que 0.2343


Python é tão ou mais fácil que shellscript, sendo muito poderoso...


Até concordo. Mas pra quem passou a faculdade toda estudando C e Java, PHP é bem mais simples e fácil.



01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts