使用sprintf打印字符串值

ind*_*i60 5 printf gnuplot

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

a = '12/7'

sprintf('%.f', a)
Run Code Online (Sandbox Code Playgroud)

我可以在Gnuplot中运行它,但是它只显示符号“ /”之前的数字。我希望输出应打印出变量a'12 / 7'的所有内容。对这种情况有什么建议吗?

ile*_*nt2 6

如果您指的是 中的sprintf内置函数gnuplot,文档help sprintf说:

sprintf("format",var1,var2,...)将标准 C 语言格式说明符应用于多个参数并返回结果字符串。如果要使用 gnuplot 自己的格式说明符,则必须改为调用gprintf(). 有关 sprintf 格式说明符的信息,请参阅标准 C 语言文档或 unix sprintf 手册页。

在 Unix 手册页中%f说(被截断):

%f, %F -- double 参数被四舍五入并转换为 [-]ddd.ddd 样式中的十进制表示法,其中小数点字符后的位数等于精度规范。

因此,您需要使用不同的格式说明符。正如 fedorqui 指出的那样,适当的格式说明符是%s.

我经常参考此链接中的表格来查找适当的格式说明符(我发现 C 手册页有点长)。

sprintf与文件中的字符串一起使用

为了用于sprintf从文件中格式化字符串,您需要指定文件中要从中提取字符串信息的列。这需要使用stringcolumn命令来完成,而不仅仅是使用$符号。

例如,如果您想从文件中包含一个数字,您可以使用如下命令:

plot "data.dat" using 1:2:(sprintf('%f', $3)) with labels
Run Code Online (Sandbox Code Playgroud)

但是对于字符串,您需要:

plot "data.dat" using 1:2:(sprintf('%s', stringcolumn(3))) with labels
Run Code Online (Sandbox Code Playgroud)


fed*_*qui 3

当你说

$ awk 'BEGIN {a="12/7"; printf "%.f", a}'
12
Run Code Online (Sandbox Code Playgroud)

您可以获得数字的 int 部分,因为通过在printff中使用标志,您可以将其转换为数字而不是字符串。所以这相当于说:

awk 'BEGIN {a="12/7"; a=int(a); print a}'
Run Code Online (Sandbox Code Playgroud)

如果您想保留所有内容,请使用%sfor string:

$ awk 'BEGIN {printf "%s", "234-456"}'
234-456
Run Code Online (Sandbox Code Playgroud)