字符串拼接
简单拼接
BEGIN{ } { a = 10; b = 1.56; c = "Hello"; d = " AWK "; x = b "" c d "" a " that's all"; print("x: "x); } END{ }
$echo ""|awk -f chapter_3_2-1.awk
x: 1.56Hello AWK 10 that's all
不用任何运算符,变量同变量、变量同字符串、字符串同字符串只需要写在同一行即可(为了格式好看之间可以插入空格),并且对于非字符串类型的遍历会被自动转换成字符串后相加。
格式化输出
除简单拼接外可以使用sprintf()
函数对字符串做复杂的格式化输出,函数原型如下:
sprintf(fmt, expr-list)
fmt 带有占位符的格式化字符串,类似c的printf()
函数 expr-list 变量列表
返回格式化后的字符串
来看一个例程: chapter_3_2-2.awk
BEGIN{ } { intValue = 10; bigValue = 99999; floatValue = 3.1415926; stringValue = "Hello"; # 按照整型输出 print(sprintf("整数输出:[%d] [%d] [%d]", intValue, floatValue, stringValue)); # 按照浮点数输出,默认6位小数,超出截断 print(sprintf("浮点数输出:[%f] [%f] [%.2f] [%5.2f]", floatValue, intValue, floatValue, floatValue)); # 输出不同进制 print(sprintf("八进制:[%o],十六进制:[%x][%X]", intValue, intValue, intValue)) # 指定宽度输出 print(sprintf("定宽数字:[%4d] [%-4d] [%04d] [%4d]", intValue, intValue, intValue, bigValue)); print(sprintf("定宽字符串:[%2s] [%10s] [%2.1s]", stringValue, stringValue, stringValue)); } END{ }
$echo ""|awk -f chapter_3_2-2.awk
整数输出:[10] [3] [0]
浮点数输出:[3.141593] [10.000000] [3.14] [ 3.14]
八进制:[12],十六进制:[a][A]
定宽数字:[ 10] [10 ] [0010] [99999]
定宽字符串:[Hello] [ Hello] [ H]