新鲜出炉的awk代码

echo "" | igawk -f main.awk

# 需求:按照多种充值方式的多种金额类型进行累加统计
# 充值方式:移动卡 10,30,50,100元,联通卡20,30,50,100 电信卡 20,30,50,100,300 
#           wap快充 2,3,5,10 移动短充,2,3,5,10
# 设计:SQL语句取得表虽然不一致,但是我保证所有的记录集都包含2个字段,单元是元
#      (固定金额的)累加值,固定金额
#       除了支付宝的其他数据表都没有记录泡豆数,但是金额可以推算出泡豆比例
#      目前有两种,一种1比10 ,一种1比8, 换算是通过savePayList函数完成(gold * paodouRate)

@include lib/db.awk
@include lib/makesql.awk

# 创建进行统计的价格列表
function makePriceList(s, arr, __ARGVEND__,tempArr)
{
        split(s,tempArr,",")
        for(i in tempArr)
        {
                arr[tempArr[i]]
        }
}

# 从记录集里提取价格
function parseResultSet(resultSet,payList,__ARGVEND__,i,tempArr)
{
        for(i in resultSet)
        {
                split(i,tempArr," ")
                total = tempArr[1]
                price = tempArr[2]
                payList[price] = total
        }
}

# 保存单条支付信息
function savePayInfo(item,price,gold,paodou, __ARGVEND__, setData)
{
        setData["item"]      = item
        setData["price"]     = price
        setData["gold"]      = gold
        setData["paodou"]    = paodou
        setData["stat_date"] = STAT_DATE

        makeInsertSQL(TABLE_NAME,setData,SCRIPT)
}

# 创建一个支付方式全部价格的支付信息
function savePayList(priceList, payList, item, paodouRate, __ARGVEND__, setData, i)
{
        for(i in priceList) # 该统计需求不在乎元素在不在数组里
        {
                savePayInfo(item, i, int(payList[i]), int(payList[i]) * paodouRate)
        }
}

# 移动充值
function chinaMobilePay(__ARGVEND__,sql,priceList,resultSet1, resultSet2, payList1, payList2, payAll, i)
{
        # 易宝卡充
        sql = "select sum(price),price from pppay_order where moneyType=1 and status=4"
        sql = sql " and from_unixtime(dateline) like '" STAT_DATE "%' group by price;"
        executeResultSet(BANKDB,sql,resultSet1)
        parseResultSet(resultSet1,payList1)

        # 神州付卡
        sql = "select floor(sum(payMoney)/100),floor(payMoney/100) from pppay_order_szf where moneyType=1"
        sql = sql " and status=8888 and cardTypeCombine=0 and inserttime like '" STAT_DATE "%' group by payMoney"
        executeResultSet(BANKDB,sql,resultSet2)
        parseResultSet(resultSet2,payList2)

        # 合并两种支付方式
        makePriceList("10,30,50,100",priceList)
        for(i in priceList)
        {
                payAll[i] = payList1[i] + payList2[i]
        }

        # 保存记录
        savePayList(priceList, payAll, "china_mobile", 10)
}

# 联通充值
function chinaUnicomPay(__ARGVEND__,sql,priceList,resultSet,payList)
{
        sql = "select floor(sum(payMoney)/100),floor(payMoney/100) from pppay_order_szf where moneyType=1"
        sql = sql " and status=8888 and cardTypeCombine=1 and inserttime like '" STAT_DATE "%' group by payMoney"

        executeResultSet(BANKDB,sql,resultSet)
        parseResultSet(resultSet,payList)
        makePriceList("20,30,50,100",priceList)
        savePayList(priceList, payList, "china_union", 10)
}

# 电信充值
function chinaTelecomPay(__ARGVEND__,sql,priceList,resultSet,payList)
{
        sql = "select floor(sum(payMoney)/100),floor(payMoney/100) from pppay_order_szf where moneyType=1"
        sql = sql " and status=8888 and cardTypeCombine=2 and inserttime like ' " STAT_DATE "%' group by payMoney"

        executeResultSet(BANKDB,sql,resultSet)
        parseResultSet(resultSet,payList)
        makePriceList("20,30,50,100,300",priceList)
        savePayList(priceList, payList, "china_telecom", 10)
}


# wap快充
function wapPay(__ARGVEND__, sql, priceList, resultSet, payList, i)
{
        sql = "select sum(price),price from pppay_order_yxjd where status=8888 and moneyType=1"
        sql = sql " and inserttime like '" STAT_DATE "%' group by price;"

        executeResultSet(BANKDB,sql,resultSet)
        parseResultSet(resultSet,payList)
        makePriceList("2,3,5,10",priceList)
        savePayList(priceList, payList, "wap", 8)
}

# 短信充值 - 移动短充
function messagePay(__ARGVEND__,sql,priceList,resultSet,payList)
{
        sql = "select sum(price),price from pppay_order_yxjd_sms where status=8888 "
        sql = sql" and inserttime like '" STAT_DATE "%' group by price;"

        executeResultSet(BANKDB,sql,resultSet)
        parseResultSet(resultSet,payList)
        makePriceList("2,3,5,10",priceList)
        savePayList(priceList, payList, "message", 8)
}

# 支付宝充值
function zhifubaoPay(__ARGVEND__, sql, record, tempArr, totalPrice, paodou)
{
        sql = "select sum(payMoney), sum(ppdou_num) from pppay_order_alipay where status=8888"
        sql = sql" and moneyType=1 and inserttime like '" STAT_DATE "%'"

        record = executeScalar(BANKDB,sql)

        split(record,tempArr," ")
        totalPrice = int(tempArr[1])
        paodou     = int(tempArr[2])

        savePayInfo("zhifubao", "-", totalPrice, paodou); 
}


BEGIN{
        DB = "/usr/local/bin/mysql --disable-auto-rehash -C "
        BANKDB = DB " -h 192.111.0.211 -u pp**** -pstat** bank**";
        STAT_DATE = "2013-09-18"

        TABLE_NAME = "pay_stat"
        SCRIPT = ""
}

END{
        chinaMobilePay()
        chinaUnicomPay()
        chinaTelecomPay()
        wapPay()
        messagePay()  
        zhifubaoPay()
}
原文地址:https://www.cnblogs.com/code-style/p/3328802.html