awk之close函数
echo "21 2 3 52 17 23" | awk '{ first[NR]=$1 second[NR]=$2 }END{ print "======打印第1列并排序:===========" > "testAwkPipe.txt" close("testAwkPipe.txt") for(i in first) print first[i] |"sort -n >> testAwkPipe.txt" close("sort -n >> testAwkPipe.txt") print "======打印第2列并排序:===========" >> "testAwkPipe.txt" close("testAwkPipe.txt") for(i in second) print second[i] |"sort -n >> testAwkPipe.txt" } close("sort -n >> testAwkPipe.txt") '
输出结果为:
======打印第1列并排序:===========
3
17
21
======打印第2列并排序:===========
2
23
52
去掉任何一个“close()”函数都无法得到上面的正确输出结果。原因就是awk中的管道使用时,如果不关闭,将会一致被使用。下面是错误的运行例子:
echo "21 2 3 52 17 23" | awk '{ first[NR]=$1 second[NR]=$2 }END{ print "======打印第1列并排序:===========" > "testAwkPipe.txt" close("testAwkPipe.txt") for(i in first) print first[i] |"sort -n >> testAwkPipe.txt" print "======打印第2列并排序:===========" >> "testAwkPipe.txt" close("testAwkPipe.txt") for(i in second) print second[i] |"sort -n >> testAwkPipe.txt" }
运行结果:
======打印第1列并排序:===========
======打印第2列并排序:===========
2
3
17
21
23
52
将所有的数据进行了排序,显然是等所有的数据都输出完毕后,再进行的sort排序。