Почему мне нужно указывать «n» в printf в отличие от print?

#awk #printf #newline

#awk #printf #новая строка

Вопрос:

Я читаю электронную книгу под названием «Язык программирования AWK», и в настоящее время я изучаю главу 1.3 и наблюдаю, как print и printf работает.

Допустим, я собираюсь распечатать содержимое 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 $%.2fn", $1, $2 * $3) }' emp.data
  

Они выдают те же результаты, но почему мне нужно указывать n в конце строки для печати новой строки в printf отличие от in print ?

Комментарии:

1. Возможно, print был разработан для того, чтобы всегда печатать строку в отличие от printf, что позволяет лучше контролировать вывод.

2. По умолчанию printf необходимо n напечатать следующую строку в новой строке.

Ответ №1:

Из руководства пользователя GNU AWK:

Оператор printf не добавляет автоматически новую строку к своим выводам. Он выводит только то, что указано в строке формата. Поэтому, если требуется новая строка, вы должны включить ее в строку формата. Выходные разделительные переменные OFS и ORS не влияют на операторы printf.

Ссылка: https://www.gnu.org/software/gawk/manual/html_node/Basic-Printf.html#Basic-Printf

Ответ №2:

Эти предопределенные методы предназначены для разных puprposes . Таким образом, может быть сценарий, в котором вы не хотите использовать новую строку после каждого вывода, вот где вы можете использовать printf и использовать else print . Вот так просто.