#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
. Вот так просто.