awk中print与printf的主要差别显示在以下两点:
- print在显示多个结果的时候以逗号分隔,结果将这几部分的内容自动使用分隔符进行分隔,且不需要添加换行符\n
- printf可以更加灵活的控制某一个字段的输出格式,通过使用诸如%-12s,%3.1f等格式化方法
现在我们通过几个例子来展示一下
通过seq 10 > test.sh来创建一个文件,首先看下文件的内容
$cat test.sh
1
2
3
4
5
6
7
8
9
10
然后我们做如下的内容
$ awk '{print "X"$1}' test.sh #可以将字符和变量直接相连接
X1
X2
X3
X4
X5
X6
X7
X8
X9
X10
$ awk '{print "X",$1}' test.sh #如果用,进行分隔,会用默认的分隔符进行分隔,这里是空格
X 1
X 2
X 3
X 4
X 5
X 6
X 7
X 8
X 9
X 10
接下来我们再看一下printf的一些例子
$awk '{printf"X"$1}' test.sh #将字符与变量连接到一起
X1X2X3X4X5X6X7X8X9X10
$awk '{printf"X",$1}' test.sh
XXXXXXXXXX
$awk '{printf"X%s",$1}' test.sh #通过%s来进行格式化
X1X2X3X4X5X6X7X8X9X10
$awk '{printf"X%s\n",$1}' test.sh #通过换行符来显式换行
X1
X2
X3
X4
X5
X6
X7
X8
X9
X10
看起来printf更加难用一点,而print要更快捷,但是printf也有自己的一些优势,就是可以定制化输出,如下例子:
$awk '{per=$1/3;printf"X%3.3f\n",per}' test.sh #以三位数显示,小数后面保留三位小数
X0.333
X0.667
X1.000
X1.333
X1.667
X2.000
X2.333
X2.667
X3.000
X3.333
$awk '{per=$1/3;printf"X%e\n",per}' test.sh #以e记法来输出结果
X3.333333e-01
X6.666667e-01
X1.000000e+00
X1.333333e+00
X1.666667e+00
X2.000000e+00
X2.333333e+00
X2.666667e+00
X3.000000e+00
X3.333333e+00
$awk '{printf"X%10s\n",$1}' test.sh #以10个字符来格式化结果字符
X 1
X 2
X 3
X 4
X 5
X 6
X 7
X 8
X 9
X 10