总结了'pkpgcounter -ccmyk'的输出。分组青色,洋红色,黄色,黑色来计算墨水用量

时间:2017-04-30 09:38:58

标签: awk sed

对于printaccounting我使用的是Tea4Cups。在/etc/cups/tea4cups.conf中我有一行:

echo `pkpgcounter  -ccmyk $TEADATAFILE` |sed 's/C\ \://g'|sed 's/M\ \://g'|sed 's/Y\ \://g'|sed 's/K\ \://g'|sed 's/\%/;/g'|sed 's/\./,/g' >>/var/log/accounting_ink.csv

pkpgcounter -ccmyk $TEADATAFILE输出如下:

C :   4.732829%      M :   4.716022%      Y :   3.545420%      K :   0.000000%
C :   4.753109%      M :   4.736302%      Y :   3.560630%      K :   0.000000%
C :   4.760295%      M :   4.743488%      Y :   3.566019%      K :   0.000000%

文件的页面越多,命令输出的输出就越多。 sed剥离非数字字符的输出并将其转换为以下内容:

3,699918;  3,285596;  2,983343;  4,169371;  1,596966;  1,635378;  1,621895;  1,306214;

现在我需要为C添加每个值;为M; Y和B可以了解打印作业的墨粉/墨水使用情况。 所以价值1和5;值2和6等。但也许第一步是确定值的总数?

3 个答案:

答案 0 :(得分:1)

当你使用awk时你永远不需要sed所以你的sed命令的中间输出对此没用,我们只需要你pkpgcounter的原始输出。

你没有显示你的预期输出,所以这是猜测,但这是你想要做的吗?

$ cat file
C :   4.732829%      M :   4.716022%      Y :   3.545420%      K :   0.000000%
C :   4.753109%      M :   4.736302%      Y :   3.560630%      K :   0.000000%
C :   4.760295%      M :   4.743488%      Y :   3.566019%      K :   0.000000%

$ cat tst.awk
{
    for (i=1; i<NF; i+=3) {
        val[i]  = $i
        sum[i] += $(i+2)
    }
}
END {
    for (i=1; i<NF; i+=3) {
        printf "%s%s: %s", (i>1?OFS:""), val[i], sum[i]
    }
    print ""
}

$ awk -f tst.awk file
C: 14.2462 M: 14.1958 Y: 10.6721 K: 0

答案 1 :(得分:0)

在GNU awk(multichar RS)中,file具有pkpgcounter的输出:

$ awk 'BEGIN{RS="%"RS"?"}{a[$1]+=$NF}END{for(i in a)print i, a[i]}' file
C 14.2462
K 0
Y 10.6721
M 14.1958

您可以将输出传输到awk,而不是使用file作为源。

编辑:单线打印版本,根据要求提供:

$ awk 'BEGIN{RS="%"RS"?"}{a[$1]+=$NF}END{for(i in a)printf "%s: %s ", i, a[i];print ""}' file
C: 14.2462 K: 0 Y: 10.6721 M: 14.1958

编辑2 :单行打印,从第一条记录中选择输出顺序:

$ awk '
BEGIN { RS="%"RS"?" }                      # set RS
NR<=4 { b[NR]=$1 }                         # store original order to b
{ a[$1]+=$NF }                             # sum
END { for(i=1;i<=4;i++)                    # respect the original order
          printf "%s: %s ", b[i], a[b[i]]  # output
      print ""                             # finishing touch
}' file
C: 14.2462 M: 14.1958 Y: 10.6721 K: 0 

答案 2 :(得分:0)

您可以使用awk

计算个别总数
echo `pkpgcounter  -ccmyk $TEADATAFILE` | 
awk '{c+=$3;m+=$6;y+=$9;k+=$12}{print}END{printf "C : %.5f%% M:%.5f%% Y:%.5f%% K:%.5f%%",c,m,y,k; print ""}'
C :   4.732829%      M :   4.716022%      Y :   3.545420%      K :   0.000000%
C :   4.753109%      M :   4.736302%      Y :   3.560630%      K :   0.000000%
C :   4.760295%      M :   4.743488%      Y :   3.566019%      K :   0.000000%
C : 14.24623% M:14.19581% Y:10.67207% K:0.00000%