AWK格式化输出
print函数
print函数用于打印不需要特别编排格式的简单输出。更为复杂的格式编排则要使用printf和sprintf。若懂得C
语言,则也一定懂得如何使用printf和sprintf。
print函数的的转义序列
/b 退格
/f 换页
/n 换行
/r 回车
/t 制表符
/047 八进制值47,即单引号
/c c代表任意其他字符
打印数字时,可能需要控制数字的格式。可以通过printf来实现,但是通过设置一个特殊的变量OFMT,是用
print函数也可以控制数字打印格式。OFMT默认为“%.6gd”,表示只打印小数部分的前6位。
例1:
long@long-Ubuntu:~$ awk 'BEGIN { OFMT="%.2f"; print 1.2456789, 12E-2 }'
1.25 0.12
printf函数
printf函数返回一个带格式的字符串给标准输出,如同C语言中的printf语句。printf语句包括一个加引号的
控制串,控制串中可能嵌套有若干格式说明和修饰符。控制串后面跟逗号,之后是一列由逗号分隔的表达式。与print函数
不同的是,printf函数不会在行尾自动换行。若要换行,在控制串中提供转义字符\n。每个百分号和格式说明都必须有一个
对应的变量。要打印百分号就必须在控制串中给出两个百分号。
printf函数的转义字符
c 字符
s 字符串
d 十进制整数
ld 十进制长整数
u 十进制无符号整数
lu 十进制无符号长整数
x 十六进制整数
lx 十六进制长整数
o 八进制整数
lo 八进制长整数
e 用科学计数法表示浮点数
f 浮点数
g 选用e或f中较短的一种形式
printf函数的修饰符
- 左对齐修饰符
# 显示八进制整数时,前面加0,显示十六进制整数时,前面加0x
+ 显示使用d、e、f、g转换的整数时,加上正负号
0 用0而不是空白符来填充所显示的值
printf函数控制串里的管道符(竖杠)是文本的一部分,用于指示格式的起始与结束。
例2:
long@long-Ubuntu:~$ echo "UNIX" | awk ' { printf "|%-15s|\n", $1 }'
|UNIX |
long@long-Ubuntu:~$ echo "UNIX" | awk ' { printf "|%15s|\n", $1 }'
| UNIX|
(%15s表示占15个字符的字符串)
文件中的awk命令
如果awk命令写在文件里,用-f选项制定awk的文件名,后面加上要处理的输入文件的文件名。awk从缓冲区读入
一条指令,接着测试awk文件中的每一条命令,然后对读入的记录执行命令。
例3:
long@long-Ubuntu:~$ cat employees
Tom Jones 4424 5/12/66 543354
Mary Adams 5346 11/4/63 28765
Sally Chang 1654 7/22/54 650000
Billy Black 1683 9/23/44 336500
long@long-Ubuntu:~$ cat awkfile
/^Mary/ {print "Hello Mary!"}
{print $1, $2, $3}
long@long-Ubuntu:~$ awk -f awkfile employees
Tom Jones 4424
Hello Mary!
Mary Adams 5346
Sally Chang 1654