Format RRDTool GPRINT with printf

Closely related to this question: Bash prefix printf

I have the following Bash script that generates an RRDGraph with RRDTool.

#!/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 creates such a graph (pay attention to the leading \ on the bottom line of costs in the legend): -

RRD Power over Week

Concentration, especially on the next line: -

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

This is a line that prints a line with a lower value in the legend.

I am passing a formatted GPRINT value from £4.54 to Bash printf , which should be padded with 11 spaces and a cost sticker with a prefix on it. Then I connect this to sed to add a space between £ and the actual value.

What I want to know is why the escaped \ comes out in the output file? If I delete \\ right after printf Bash complains that something is missing.

How could I suppress this \ output.

+4
source share
1 answer

Try this line:

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

I changed the internal labels to ' labels ' and removed the backslash.

+4
source

All Articles