Умножение 2-х переменных - PullRequest
1 голос
/ 26 января 2012

Возможно, я работаю над одним из моих вариантов в моей программе.У меня есть текстовый файл с содержанием ниже.

Формат Title:Author:Price:QtyAvailable:QtySold, например:

Harry Potter - The Half Blood Prince:J.K Rowling:40.30:10:50
The little Red Riding Hood:Dan Lin:40.80:20:10
Harry Potter - The Phoniex:J.K Rowling:50.00:30:20
Harry Potter - The Deathly Hollow:Dan Lin:55.00:33:790
Little Prince:The Prince:15.00:188:9
Lord of The Ring:Johnny Dept:56.80:100:38

Ниже приведена моя функция:

printf "%-22s %-16s %-14s %-15s %-13s %s\n", "Title", "Author", "Price","Qty Avail.", "Qty Sold", "Total Sales"
grep "$1" BookDB.txt | while IFS=: read Title Author Price QtyAvailable QtySold; do
  printf "%-22s %-16s %-14.2f %-15d %-13d %0.2f\n", "$Title" "$Author" "$Price" "$QtyAvailable" "$QtySold"
done

Проблема в том, что мне нужен еще один столбец, который называется Total Sales, вычисляемый умножением Price и QtySold.Однако я пробовал разные способы, такие как $Price * $QtySold или $3 * $5, но программа все равно не вычисляет его для меня.Какой должен быть правильный метод или способ решить эту проблему?

Ответы [ 3 ]

6 голосов
/ 26 января 2012

использовать (())

Пример:

A=5 B=6 echo  $(($A*$B))
30

Для чисел с плавающей запятой следует использовать awk или bc:

A=5.5 B=6; echo $A \* $B | bc
A=5.5 B=6;  echo -e "$A\t$B" |  awk '{print $1 * $2}'

Тем не менее, использование awk для всего сценария лучше для ваших нужд:

awk -F: 'BEGIN{ printf "%-50s %-16s %-14s %-15s %-13s %s\n",
           "Title", "Author", "Price", "Qty Avail.", "Qty Sold", "Total Sales"}
         $1 ~ search  {printf "%-50s %-16s %12.2f   %13d   %10d  %10.2f\n",
            $1, $2, $3, $4, $5, $3 * $5}' BookDB.txt search=Harry

Или, если вы хотите Perl, который немного короче:

perl -an -F: -s -e 'BEGIN{ printf "%-50s %-16s %-14s %-15s %-13s %s\n", "Title", "Author", "Price", "Qty Avail.", "Qty Sold", "Total Sales"}' \ 
 -e 'printf "%-50s %-16s %12.2f   %13d   %10d  %10.2f\n",@F,$F[2]*$F[4] if /$search/' -- -search=Harry BookDB.txt
0 голосов
/ 26 января 2012

строка = Властелин Кольца: Джонни Депт: 56.80: 100: 38

echo $line | awk -F":" '{$6=$3*$5; print "$3*$5="$6}'

Выход: $ 3 * $ 5 = 2158.4

0 голосов
/ 26 января 2012

Вы можете использовать bc следующим образом:

printf "%-22s %-16s %-14.2f %-15d %-13d %0.2f %0.2f\n", "$Title" "$Author" "$Price" "$QtyAvailable" "$QtySold" "$(echo $QtySold*$Price | bc)"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...