使用sprintf打印字符串值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用sprintf打印字符串值相关的知识,希望对你有一定的参考价值。
实际上,我在Gnuplot中遇到了这个问题。但是以一种简单的方式,问题是我想使用sprintf以字符串格式打印,即使该字符串由数字和符号组成。像这样:
a = '12/7'
sprintf('%.f', a)
我可以在Gnuplot中运行它,但它只显示符号“/”之前的数字。我希望输出应该打印变量a
的所有内容,即'12 / 7'。对此案有何建议?
如果你指的是sprintf
中的gnuplot
内置函数,那么文档help sprintf
说:
sprintf("format",var1,var2,...)
将标准C语言格式说明符应用于多个参数并返回结果字符串。如果你想使用gnuplot自己的格式说明符,你必须改为调用gprintf()
。有关sprintf格式说明符的信息,请参阅标准C语言文档或unix sprintf手册页。
在%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
当你说
$ awk 'BEGIN {a="12/7"; printf "%.f", a}'
12
你得到数字的int部分,因为通过在f
中使用printf标志,你将它转换为数字而不是字符串。所以它相当于说:
awk 'BEGIN {a="12/7"; a=int(a); print a}'
如果你想保留所有这些,请使用%s
作为字符串:
$ awk 'BEGIN {printf "%s", "234-456"}'
234-456
以上是关于使用sprintf打印字符串值的主要内容,如果未能解决你的问题,请参考以下文章