Примеры print
!awk 'BEGIN { print "line one\nline two\nline three" }'
line one line two line three
Пробел — разделитель по-умолчанию.
!awk 'BEGIN { print "line one","line two","line three" }'
line one line two line three
!awk '{ print $1,$2 }' inventory-shipped | head -n3
Jan 13 Feb 15 Mar 15
Печать полей без запятой приводит к «склеиванию» полей
!awk '{ print $1 $2 }' inventory-shipped | head -n3
Jan13 Feb15 Mar15
Header
!awk 'BEGIN {print "Month", "Crates";\
print "-----", "------"}{ print $1," ",$2 }' inventory-shipped | head -n5
Month Crates ----- ------ Jan 13 Feb 15 Mar 15
Разделитель полей вывода (OFS)
Разделитель по-умолчанию — пробел » «. Разделитель можно задать явно через переменную OFS
!awk 'BEGIN {OFS="-->"} { print $1,$2 }' inventory-shipped | head -n3
Jan-->13 Feb-->15 Mar-->15
Разделитель строк вывода (ORS)
Разделитель по-умолчанию — новая строка «\n». Разделитель можно задать явно через переменную ORS
!awk 'BEGIN {OFS="-->"; ORS = "\n\n"} { print $1,$2 }' inventory-shipped | head -n3
Jan-->13 Feb-->15
!awk -v OFS='-->' -v ORS='\n\n' '{ print $1,$2 }' inventory-shipped | head -n3
Jan-->13 Feb-->15
!awk '{ print $1,$2 }' OFS='-->' ORS='\n\n' inventory-shipped | head -n3
Jan-->13 Feb-->15
Красивая печать при помощи printf
printf format, item1, item2, ...
Печать при помощи printf
имеет несколько особенностей:
- формат выдачи на печать задается одной текстовой переменной
- printf в отличие от print, не добавляет символ новой строки
\n
автоматически - форматирование в printf состоит из ДВУХ ОБЯЗАТЕЛЬНЫХ СИМВОЛОВ и модификаторов:
%
— символ начала форматировани, ОБЯЗАТЕЛЬНЫЙ символs,d,f,g,e .....
— символ формата, ОБЯЗАТЕЛЬНЫЙ символs
— текстd
— целое числоf
— число с запятойg
— или экспоненциальная форма вывода (e) или число с запятой (f), что корочеe
— экспоненциальная форма вывода
- модификаторы, например:
%10s
— текст шириной 10 позиций. Любое число означает ширину поля (для числа начинающегося с0
см. ниже). По умолчанию, выводимая величина выравнивается по правому краю.%-10s
—-
, выравнивание по левому краю%010d
-0
как первый модификатор, добавляет0
перед числом до ширины поля в 10 знаков. Работает только:- для чисел
- если заявленное поле шире чем число, которое нужно напечатать
%+d
—+
— всегда добавлять знак% d
—, пробел, только для цифр. Добавлять пробел для положительных цифр, отображать минус для отрицательных
%'.6f
— апосторф'
, число должно содержать тысячный разделитель (в целой части числа). Работает только для чисел. Добавляется как'\''
%.6f
— точка.n
. Значение применимо только для числовых форматов и означает:%d , %i , %o , %u , %x , %X
— ширина поля, если целое число меньше — спереди добавляются0
%e , %E , %f , %F
— количество знаков после запятой%s
— МАКСИМАЛЬНОЕ количество знаков для печати
!awk 'BEGIN {printf "%+.2e", 6321.67867868}'
+6.32e+03
!awk 'BEGIN {printf "%010'\''+.2f", 6321.67867868}'
+06,321.68
!awk 'BEGIN {printf "%.2d", 1234}'
1234
!awk 'BEGIN {printf "%.6i", 1234}' # 6 -- ширина поля
001234
!awk 'BEGIN {printf "%.2s", "abcd"}'
ab
!awk '{ printf "%-10s %s\n", $1, $2 }' mail-list | head -n5
Amelia 555-5553 Anthony 555-3412 Becky 555-7685 Bill 555-1675 Broderick 555-0542
Формат второго поля %s
ОБЯЗАТЕЛЕН, т.к. если попробовать распечатать второе поле как число, то «как число» будет распечтана только первая часть телефонного номера до дефиса.
!awk '{ printf "%-10s %f\n", $1, $2 }' mail-list | head -n5
Amelia 555.000000 Anthony 555.000000 Becky 555.000000 Bill 555.000000 Broderick 555.000000
!awk 'BEGIN { printf "%-10s %s\n", "Name", "Number";\
printf "%-10s %s\n", "----", "------" }\
{ printf "%-10s %s\n", $1, $2 }' mail-list
Name Number ---- ------ Amelia 555-5553 Anthony 555-3412 Becky 555-7685 Bill 555-1675 Broderick 555-0542 Camilla 555-2912 Fabius 555-1234 Julie 555-6699 Martin 555-6480 Samuel 555-3430 Jean-Paul 555-2127
Повторяющийся формат может быть присвоен переменной
!awk 'BEGIN { format = "%-10s %s\n"; \
printf format, "Name", "Number";\
printf format, "----", "------" }\
{ printf format, $1, $2 }' mail-list
Name Number ---- ------ Amelia 555-5553 Anthony 555-3412 Becky 555-7685 Bill 555-1675 Broderick 555-0542 Camilla 555-2912 Fabius 555-1234 Julie 555-6699 Martin 555-6480 Samuel 555-3430 Jean-Paul 555-2127
Печать в файл
print items > output-file
Перед началом печати первой строки в файл — файл СТИРАЕТСЯ. Последующие строки ДОБАВЛЯЮТСЯprint items >> output-file
— строки добавляются
!awk '{printf "%02d. %s\n", NR, $1 > "name.txt"; print $2 > "telephone.txt"}' mail-list
cat name.txt | tail -n3
09. Martin 10. Samuel 11. Jean-Paul
Write a comment: