首页 > 代码库 > shell文本过滤编程(五):awk之printf

shell文本过滤编程(五):awk之printf

【版权声明:转载请保留出处:blog.csdn.net/gentleliu。Mail:shallnew at 163 dot com】 
在大多数情况下 awk 的 print 语句可以完成任务,但有时我们还需要更多。在那些情况下,awk 提供了两个我们熟知的函数 printf() 和 sprintf()。是的,如同其它许多 awk 部件一样,这些函数等同于相应的 C 语言函数。printf() 会将格式化字符串打印到 stdout,而 sprintf()函数返回根据printf格式说明指定的格式化的字符串,它格式化数据但不输出数据。a w k提供函数p r i n t f,拥有几种不同的格式化输出功能。例如按列输出、左对齐或右对齐方式。
printf()函数基本语法是printf()(”格式控制符“,参数) ,格式控制字符通常在引号里。类似C语言,awk printf格式有如下:
% c A S C I I字符
% d 整数
% e 浮点数,科学记数法
% f 浮点数,例如(1 2 3 . 4 4)
% g awk决定使用哪种浮点数转换 e或者f
% o 八进制数
% s 字符串
% x 十六进制数
下面来试试这些个格式:
# echo 97 | awk '{printf("%c\n", $0)}'  
A
像C语言一样,换行需要加“\n”。
# echo 97 | awk '{printf("%d\n", $0)}'
97
# echo 97 | awk '{printf("%f\n", $0)}'
97.000000
# echo 97 | awk '{printf("%e\n", $0)}'
9.700000e+01
# echo 97 | awk '{printf("%s\n", $0)}'
97
类似C语言的格式化输出:
# awk 'BEGIN{FS=":"}{printf("%-15s%s\n", $1, $3)}' group_file2
wireshark    987
usbmon       986
jackuser     985
vboxusers    984
aln         1001
sprintf()函数返回根据printf格式说明指定的格式化的字符串,它格式化数据但不输出数据。所以需要将sprintf返回的数据保存在变量里面再输出。
# awk 'BEGIN{FS=":";ORS=""}{var=sprintf("%s\n", $1);print var}' group_file2
wireshark
usbmon
jackuser
vboxusers
aln
其他的用法和C语言类似。

shell文本过滤编程(五):awk之printf