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排序。

原文地址:https://www.cnblogs.com/wzyj/p/4736031.html