实际上,我在Gnuplot中遇到了这个问题。但是以一种简单的方式,问题是我想使用sprintf以字符串格式打印,即使该字符串由数字和符号组成。像这样:
a = '12/7'
sprintf('%.f', a)
我可以在Gnuplot中运行它,但它只显示符号“/”之前的数字。我希望输出应该打印变量a
的所有内容,即'12 / 7'。对此案有何建议?
答案 0 :(得分:4)
如果您在sprintf
中引用gnuplot
内置函数,则文档help sprintf
会说:
sprintf("format",var1,var2,...)
采用标准C语言格式 多个参数的说明符并返回结果字符串。如果 你想使用gnuplot自己的格式说明符,你必须改为 致电gprintf()
。有关sprintf格式说明符的信息, 请参阅标准C语言文档或unix sprintf man 页。
在%f
的Unix手册页中说(截断):
%f,%F - 双参数舍入并转换为十进制 符号 在样式[ - ] ddd.ddd中,其后的位数 小数点字符等于精度规格。
因此,您需要使用不同的格式说明符。正如fedorqui指出的那样,适当的格式说明符是%s
。
我经常引用the table in this link查找相应的格式说明符(我发现C手册页有点长)。
将sprintf
与文件中的字符串一起使用
为了使用sprintf
格式化文件中的字符串,您需要指定文件中的列以从中提取字符串信息。这需要使用stringcolumn
命令而不是仅使用$
符号来完成。
例如,如果要包含文件中的数字,可以使用如下命令:
plot "data.dat" using 1:2:(sprintf('%f', $3)) with labels
但是对于你需要的字符串:
plot "data.dat" using 1:2:(sprintf('%s', stringcolumn(3))) with labels
答案 1 :(得分:3)
当你说
时$ awk 'BEGIN {a="12/7"; printf "%.f", a}'
12
你得到数字的int部分,因为在printf中使用f
标志,你将它转换为数字而不是字符串。所以它相当于说:
awk 'BEGIN {a="12/7"; a=int(a); print a}'
如果您想保留所有内容,请使用%s
作为字符串:
$ awk 'BEGIN {printf "%s", "234-456"}'
234-456
答案 2 :(得分:0)
您可以乘以浮点数,并按以下方式使用它:
sprintf('%.f', a*1.0)
通过这种方式,您强制 gnuplot 将 a 视为浮点数。