为什么我需要在printf中指定“\ n”而不像print?

时间:2014-06-29 02:57:39

标签: awk printf newline

我正在阅读一本名为" AWK编程语言的电子书"我目前正在讨论第1.3章,并观察了printprintf的工作原理。

我们假设我打算以emp.data的形式打印"total pay of [name] [total pay]"的内容。

emp.data中的数据是:

Beth    4.00    0
Dan     3.75    0
Kathy   4.00    10
Mark    5.00    20
Mary    5.50    22
Susie   4.25    18

当我在终端中使用print时,我只需输入:

$ awk '{ print "total pay of", $s1, $s2 * $s3 }' emp.data

但是当我在终端中使用printf时,我还需要像这样指定\n

$ awk '{ printf("total pay for %s $%.2f\n", $1, $2 * $3) }' emp.data

他们会输出相同的结果,但为什么我需要在字符串的末尾指定\n以在printf中打印换行符,而不是print

2 个答案:

答案 0 :(得分:3)

来自GNU AWK用户指南:

  

printf语句不会自动在其输出中附加换行符。它仅输出格式字符串指定的内容。因此,如果需要换行符,则必须在格式字符串中包含一个换行符。输出分隔符变量OFS和ORS对printf语句没有影响。

参考:https://www.gnu.org/software/gawk/manual/html_node/Basic-Printf.html#Basic-Printf

答案 1 :(得分:0)

这些预定义的方法是针对不同的puprposes设计的。 因此,可能会有一个scneario,您不希望在每个输出后使用换行符,您可以使用printf,然后使用print。 就这么简单。