简体   繁体   English

使用printf进行RRDTool GPRINT格式化

[英]RRDTool GPRINT formatting with printf

Closely related to this question: Bash printf prefix 与此问题密切相关: Bash printf前缀

I have the following Bash script that is generating an RRDGraph with RRDTool. 我有以下Bash脚本,它使用RRDTool生成RRDGraph。

#!/bin/bash

now=$(date +%s)
now_formatted=$(date +%s | awk '{printf "%s\n", strftime("%c",$1)}' | sed -e 's/:/\\:/g')

# create power graph for last week
/usr/bin/rrdtool graph /var/www/power-week.png \
--start end-7d --width 543 --height 267 --end $now-1min --slope-mode \
--vertical-label "Watts" --lower-limit 0 \
--alt-autoscale-max \
--title "Power: Last week vs. week before" \
--watermark "(©) $(date +%Y) Alyn R. Tiedtke" \
--font WATERMARK:8 \
DEF:Power=/root/currentcost/ccdata.rrd:Power:AVERAGE \
DEF:Power2=/root/currentcost/ccdata.rrd:Power:AVERAGE:end=$now-7d1min:start=end-7d \
VDEF:Last=Power,LAST \
VDEF:First=Power,FIRST \
VDEF:Min=Power,MINIMUM \
VDEF:Peak=Power,MAXIMUM \
VDEF:Average=Power,AVERAGE \
CDEF:kWh=Power,1000,/,168,* \
CDEF:Cost=kWh,.1029,* \
SHIFT:Power2:604800 \
LINE1:Power2#00CF00FF:"Last Week\\n" \
HRULE:Min#58FAF4:"Min    " \
GPRINT:Power:MIN:"%6.2lf%sW" \
COMMENT:"\\n" \
LINE1:Power#005199FF:"Power  " \
AREA:Power#00519933:"" \
GPRINT:Last:"%6.2lf%sW" \
COMMENT:"\\n" \
HRULE:Average#9595FF:"Average" \
GPRINT:Power:AVERAGE:"%6.2lf%sW" \
COMMENT:"\\n" \
HRULE:Peak#ff0000:"Peak   " \
GPRINT:Power:MAX:"%6.2lf%sW" \
COMMENT:"\\n" \
GPRINT:kWh:AVERAGE:"  total    %6.2lfkWh\\n" \
GPRINT:Cost:AVERAGE:"  cost     %6.2lf £\\n" \
GPRINT:Cost:AVERAGE:"$(printf \\" cost %11s\\" £%.2lf | sed 's/\£/\£ /g')\\n" \
COMMENT:" \\n" \
GPRINT:First:"Showing from %c\\n":strftime \
GPRINT:Last:"          to %c\\n":strftime \
COMMENT:"  Created at $now_formatted"

Which produces a graph like this (notice the leading \\ on the lower cost line in the legend):- 这会产生这样的图形(注意图例中较低成本线上的前导\\ ): -

RRD超过一周的电力

Concentrating specifically on the following line:- 专注于以下几行: -

GPRINT:Cost:AVERAGE:"$(printf \\" cost %11s\\" £%.2lf | sed 's/\£/\£ /g')\\n" \

This is the line that is printing out the lower cost line in the legend. 这是在图例中打印出较低成本行的行。

I am passing a GPRINT formatted value of £4.54 to Bash's printf function to be padded out to 11 spaces and a cost label prefixed on it. 我将一个£4.54的GPRINT格式值传递给Bash的printf函数,将其填充到11个空格并在其上加上cost标签。 I am then piping this to sed to add a space between the £ and the actual value. 然后我将它用于sed以在£和实际值之间添加一个空格。

What I want to know is, why is the escaped \\ coming through in the output? 我想知道的是,为什么是逃脱\\输出未来通过? If I remove the \\\\ just after printf bash complains that something is missing. 如果我在printf bash之后删除了\\\\抱怨缺少某些东西。

How would I suppress this \\ from coming through in the output. 我如何在输出中抑制这个\\

Try this line: 试试这一行:

GPRINT:Cost:AVERAGE:"$(printf ' cost %11s' £%.2lf | sed 's/\£/\£ /g')\\n" \

I changed the inner " marks to ' marks and removed the backslashes. 我将内部的 "标记'更改为标记并删除了反斜杠。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM