awk中printf的⽤法
printf函数
打印输出时,可能需要指定字段间的空格数,从⽽把列排整齐。在中使⽤制表符并不能保证得到想要的输出,因此,可以⽤printf函数来格式化特别的输出。
printf函数返回⼀个带格式的字符串给标准输出,如同C语⾔中的printf语句⼀样。printf语句包括⼀个加引号的控制串,控制串中可能嵌有若⼲格式说明和修饰符。控制串后⾯跟⼀个逗号,之后是⼀列由逗号分隔的表达式。printf函数根据控制串中的说明编排这些表达式的格式。与print函数不同的是, printf不会在⾏尾⾃动换⾏。因此,如果要换⾏,就必须在控制串中提供转义字符\n。
每⼀个百分号和格式说明都必须有⼀个对应的。要打印百分号就必须在控制串中给出两个百分号。请参考print转义字符和printf修饰符。格式说明由百分号引出,另外还列出了printf所⽤的格式说明符。
printf使⽤的转义字符
转义字符定义
c字符
s字符串
d⼗进制整数
ld⼗进制长整数
u⼗进制⽆符号整数
lu⼗进制⽆符号长整数
x⼗六进制整数
lx⼗六进制长整数
o⼋进制整数
lo⼋进制长整数
e⽤科学记数法(e 记数法)表⽰的浮点数
f浮点数
g选⽤e或f中较短的⼀种形式
printf的修饰符
字符定义
-左对齐修饰符
#显⽰8 进制整数时在前⾯加个0
显⽰16 进制整数时在前⾯加0x
+显⽰使⽤d 、e 、f 和g 转换的整数时,加上正负号+或-
0⽤0⽽不是空⽩符来填充所显⽰的值
printf的格式说明符
格式说明符功能
%c 打印单个ASCII 字符
printf("The character is %c\n",x)输出: The character is A
%d 打印⼀个⼗进制数
printf("The boy is %d years old\n",y)输出:The boy is 15 years old
%e打印数字的e 记数法形式
printf函数打印字符串
printf("z is %e\n",z) 打印: z is 2.3e+0 1
%f打印⼀个浮点数
printf("z is %f\n", 2.3 * 2)
输出: z is 4.600000
%o 打印数字的⼋进制printf("y is %o\n",y)输出:z is 17
输出:z is 17
%s 打印⼀个字符串
print("The name of the culprit is %s\n",$1)输出:The name of the culprit is Bob Smith
%x 打印数字的⼗六进制值printf("y is %x\n",y)
输出:x is f
格式说明符功能
打印变量时,输出所在的位置称为"域"(field),域的宽度(width)是指该域中所包含的字符个数。下⾯这些例⼦中, printf控制串⾥的管道符(竖杠)是⽂本的⼀部分,⽤于指⽰格式的起始与结束。
范例
$ echo "Linux" | awk '{printf "|%-15s|\n",$1}'
|Linux          |
说明:对于echo命令的输出,Linux是经管道发给awk。printf函数包含⼀个控制串。百分号让printf做好准备,它要打印⼀个占15个格、向左对齐的字符串,这个字符串夹在两个竖杠之间,并且以换⾏符结尾。百分号后的短划线表⽰左对齐。控制串后⾯跟了⼀个逗号和$1。printf 将根据控制串中的格式说明来格式化字符串Linux。
范例
$ echo "Linux" | awk '{printf "|%15s|\n",$1}'
|          Linux|
说明:字符串Linux被打印成⼀个占15 格、向右对齐的字符串,夹在两个竖杠之间,以
换⾏符结尾。
范例
$ 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
$ awk '{printf "The name is: %-15s ID is %8d\n",$1,$3}' employees
The name is Tom            ID is 4424
The name is Mary            ID is 5346
The name is Sally          ID is 1654
The name is Billy          ID is 1683
说明:要打印的字符串放置在两个双引号之间。第⼀个格式说明符是%-15s,它对应的参数是$1,紧挨着控制串的右半边引号后⾯的那个逗号。百分号引出格式说明:短划线表⽰左对齐,15s表⽰占15格的字符串。这条命令⽤来打印⼀个左对齐、占15格的字符串,后⾯跟着字符串的ID和⼀个整数。
格式:%8d表⽰在字符串的这个位置打印$2 的⼗进制(整数)值。这个整数占8格,向右对齐。您也可以选择将加引号的字符串和表达式放在圆括号⾥。
原⽂地址:www.linuxawk/jiaocheng/83.html