Определение новой переменной из деления двух других переменных с помощью скрипта bash - PullRequest
0 голосов
/ 18 февраля 2020

У меня есть 2 переменные, которые являются up_votes и down_votes из набора данных CSV. Я пытаюсь создать новую переменную в процентах от up_votes / total_votes. Например, up_votes = 296 down_votes = 255, мой вывод должен быть 53,7, но я получаю 25600. Вот мои уравнения.

    x=$col3
    y=$col3+$col4
    z=($x/$y)*100
    ans=$z

1 Ответ

1 голос
/ 18 февраля 2020

Вам нужно использовать внешние программы для выполнения вычислений, потому что bash не поддерживает арифметику с плавающей точкой c

#!/bin/bash


votes="topic1,0,0 topic2,296,255 topic3,3,4"

for vote_data in $votes ; do
    topic=`echo $vote_data|sed -r 's/([^,]*),([^,]*),(.*)/\1/'`
    up_votes=`echo $vote_data|sed -r 's/([^,]*),([^,]*),(.*)/\2/'`
    down_votes=`echo $vote_data|sed -r 's/([^,]*),([^,]*),(.*)/\3/'`

#    echo "$topic , up: $up_votes, down: $down_votes"

    total=`awk "BEGIN {print ($up_votes+$down_votes)}"`
    if [ $total -eq 0 ];then
    ans=divbyzero
    else
    ans=`awk "BEGIN {print 100.0*$up_votes/( $up_votes+$down_votes)}"`
    fi
    echo "$topic $ans [ $up_votes / $down_votes ]"

done

вывод:

topic1 divbyzero [ 0 / 0 ]
topic2 53.7205 [ 296 / 255 ]
topic3 42.8571 [ 3 / 4 ]
...