Pour la comptabilité d'impression, j'utilise Tea4Cups. Dans /etc/cups/tea4cups.conf, j'ai une ligne:

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 donne une sortie comme:

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%

Plus un fichier a de pages, plus la commande donnera de résultats. sed supprime la sortie des caractères qui ne sont pas numériques et la transforme en ce qui suit:

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

Maintenant, je dois ajouter chaque valeur pour C; forme; Y et B pour avoir une idée de l'utilisation du toner / encre des travaux d'impression. Donc valeur 1 et 5; valeur 2 et 6 etc. Mais peut-être qu'une première étape consiste à déterminer le nombre total de valeurs?

0
Jef 30 avril 2017 à 12:38

3 réponses

Meilleure réponse

Vous pouvez calculer les totaux individuels en utilisant 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%
0
sjsam 30 avril 2017 à 10:35

Vous n'avez jamais besoin de sed lorsque vous utilisez awk, donc la sortie intermédiaire de votre commande sed n'est pas utile pour cela, tout ce dont nous avons besoin est votre sortie d'origine de pkpgcounter.

Vous ne montrez pas votre sortie attendue, c'est donc une supposition, mais est-ce ce que vous essayez de faire?

$ 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
Ed Morton 30 avril 2017 à 14:05

Dans GNU awk (multichar RS), file a la sortie de 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

Vous pouvez diriger la sortie vers le awk au lieu d'utiliser le file comme source.

Modifier: Version d'impression sur une seule ligne, comme demandé:

$ 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

Édition 2: Impression sur une seule ligne avec ordre de sortie sélectionné à partir du premier enregistrement:

$ 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 
0
James Brown 30 avril 2017 à 13:55