使用sprintf打印字符串值

时间:2015-12-29 15:42:46

标签: printf gnuplot

实际上,我在Gnuplot中遇到了这个问题。但是以一种简单的方式,问题是我想使用sprintf以字符串格式打印,即使该字符串由数字和符号组成。像这样:

a = '12/7'

sprintf('%.f', a)

我可以在Gnuplot中运行它,但它只显示符号“/”之前的数字。我希望输出应该打印变量a的所有内容,即'12 / 7'。对此案有何建议?

3 个答案:

答案 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 视为浮点数。