AA制消費金額統計的Bash指令碼

2021-08-31 17:24:29 字數 2068 閱讀 8375

每次消費記錄佔一行,第一項是每次的總金額,從第二項開始是消費人員的列表。比如:

34 zhy kx zxe

39 zhy kx zxe oyc

36 zhy kx zxe

50 zhy kx zxe oyc

36 zhy kx zxe

對每行資料進行分解,得到總金額,得到人數,每個人的消費金額就是總金額除以人數,對每個人的金額求和。

#!/bin/sh

# 用法:./calc_bill.sh [discount]

# 折扣,由第乙個引數指定,如果沒有指定就設定為1,即無折扣

# 折扣可以是小數,比如 0.8;也可以是乙個除式,比如 1/1.1 或 10/11

discount=$

# 人員陣列

declare -a ids

# 費用陣列,儲存乙個計算費用的表示式,比如 0+34/3+45/4

declare -a fee

# 在人員陣列ids中查詢人員,如果沒有查到就增加,將位置通過退出碼返回

find_or_add_id()

for ((i = 0; i < n; ++i))

doif [ "$" == "$1" ]; then

return $i

fidone

ids[n]=$1

fee[n]=0

return $n

}# 讀取資料並處理

# 資料格式:每行一條記錄,第一項是總金額,第二項開始時消費人員的名單

while read -a data

do amt=$ # 總金額

if [ ! "$amt" ]; then continue; fi

declare -i num=$-1 # 消費人員的數量

echo "$num $"

for id in "$" # 對每乙個人員進行處理

dofind_or_add_id "$id"

index=$?

#echo "index of $id is $index"

fee[index]="$+$amt/$num"

done

#declare -p ids

#declare -p fee

done

echo

# 列印並計算每個人的消費金額

# 格式:人員 金額

for ((i = 0; i < $; ++i))

do #echo "$" "$(echo "scale=2; ($)*$discount" | bc)"

printf "%-4s %8s\n" "$" "$(echo "scale=4; ($)*$discount" | bc)"

done

[root@jfht bill]# cat bill20110902.txt

34 zhy kx zxe

39 zhy kx zxe oyc

36 zhy kx zxe

50 zhy kx zxe oyc

36 zhy kx zxe

[root@jfht bill]# ./calc_bill.sh 10/11

3 34 zhy kx zxe

4 39 zhy kx zxe oyc

3 36 zhy kx zxe

4 50 zhy kx zxe oyc

3 36 zhy kx zxe

zhy   52.3484

kx    52.3484

zxe   52.3484

oyc   20.2272

[root@jfht bill]#./calc_bill.sh

3 34 zhy kx zxe

4 39 zhy kx zxe oyc

3 36 zhy kx zxe

4 50 zhy kx zxe oyc

3 36 zhy kx zxe

zhy   52.3484

kx    52.3484

zxe   52.3484

oyc   20.2272

[root@jfht bill]#

Mysql 查詢統計不同型別的訂單繳費金額和筆數

select coalesce sum case when order state 1 then paid amount else 0 end 0 errsummoney,coalesce sum case when order state 2 then paid amount else 0 end...

統計主要供應商供貨數量和金額的比例一

如何通過金蝶分析一段時間 主要 各 商供貨數量和金額佔 主要 商總數量和總金額的比例。select distinct select sum fauxqty from icstockbill v1 inner join icstockbillentry u1 on v1.finterid u1.fin...

統計二進位制中1的個數

題目 統計乙個無符號數中的二進位制表示中1的個數。此演算法名為平行計算法。基本思想如下 先兩兩 兩個二進位制位 分組統計每組出現的1的個數,而每組1的個數只可能是0個 00 1個 01 或2個 10 由 相加所得的 兩位的二進位制完全可以表示每組 兩個二進位制數 中1的個數 接著四四 4個二進位制位...