RRDTool GPRINT formatting with printf
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.
general exception
An enthusiastic, multi-skilled computer programmer with 10 years progressive experience in software development. Competent in a range of technologies varying from web orientated languages to back end and database technologies. Mostly involved with Microsoft .NET but not limited to. I learn new skills quickly and thrive on being challenged by new opportunities. I have excellent communication skills and am a proven mentor. I am a natural teacher and take great pride in sharing my skills with others. I believe in using illustrative concepts to help others understand complex situations and frequently use this approach when providing guidance and training. Excellent analytical skills and a logical thinking process makes me a strong problem solver. I am also a fluent Welsh speaker.
Updated on July 06, 2022Comments
-
general exception almost 2 years
Closely related to this question: Bash printf prefix
I have the following Bash script that is generating 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 produces a graph like this (notice the leading
\
on the lower cost line in the legend):-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'sprintf
function to be padded out to 11 spaces and acost
label prefixed on it. I am then piping this tosed
to add a space between the£
and the actual value.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.How would I suppress this
\
from coming through in the output.