Uma combinação paste
e bc
é uma boa opção para aritmética simples:
paste -d/ file1 file2 | bc -l
Saída:
.2000000000
.0300000000
.0040000000
Um exemplo mais avançado
Com alguns truques você pode ficar um pouco mais complicado. Diga file3
contém:
6
7
8
Você pode fazer (file1 + file3) / file2
da seguinte forma:
paste -d'(+)/' /dev/null file1 file3 /dev/null file2
Saída:
(2+6)/10
(3+7)/100
(4+8)/1000
Isso funciona porque paste
percorre sua lista de delimitadores para cada linha.
Reagir a dividir por zero
As operações do Illigal enviadas para bc
resultam em um aviso sendo enviado ao erro padrão. Você poderia redirecioná-los para um arquivo diferente e decidir o fluxo do programa com base em seu conteúdo, por exemplo:
paste -d/ file1 file2 | bc -l > resultfile 2> errorfile
if grep -q 'Divide by zero' errorfile; then
echo "Error in calculation"
else
echo "All is well"
fi
Ou se houver algum erro:
paste -d/ file1 file2 | bc -l > resultfile 2> errorfile
if ! file errorfile | grep -q empty; then
echo "Error in calculation"
else
echo "All is well"
fi