2D阵列打印后打印AWK文件脚本

时间:2016-03-25 01:53:29

标签: linux awk

我在2D printf之后一直在尝试打印,但是我在数组之后打印的打印发生在2D阵列打印之前。

这是有问题的代码(在awk脚本中):

(in main block) if(tot >= 500) { totEligible++ eligibles[totEligible,1] = $1 eligibles[totEligible,2] = $2 } (in end block) { # print out all the eligible contributors' information for(i = 1; i <= totEligible; i++) { printf("\t%s--%s\n", eligibles[i,1], eligibles[i,2]) | "sort -k2" if (i == totEligible -1){ printf "\t\tThanks for all your continued support!!!" } } }

输出结果如下: (in main block) if(tot >= 500) { totEligible++ eligibles[totEligible,1] = $1 eligibles[totEligible,2] = $2 } (in end block) { # print out all the eligible contributors' information for(i = 1; i <= totEligible; i++) { printf("\t%s--%s\n", eligibles[i,1], eligibles[i,2]) | "sort -k2" if (i == totEligible -1){ printf "\t\tThanks for all your continued support!!!" } } }

它应该显示在伊丽莎白·斯塔切林(Elizabeth Stachelin)线下方,但它并没有这样做。知道问题可能是什么?提前谢谢。

2 个答案:

答案 0 :(得分:2)

在感谢打印之前,您需要使用close("sort -k2")关闭shell管道。看:

$ awk 'BEGIN{print "b" ORS "a" | "sort"; print "Done!"}'
Done!
a
b

$ awk 'BEGIN{print "b" ORS "a" | "sort"; close("sort"); print "Done!"}'
a
b
Done!

在你的脚本中&#34;排序&#34;只是坐在那里等待更多的输入,直到脚本结束(感谢你的打印发生之后),然后关闭管道以排序并输出那种结果。

将shell命令存储在变量中是最佳做法,这样您就可以保证在管道上完全相同的字符串上执行close()

$ awk 'BEGIN{cmd="sort"; print "b" ORS "a" | cmd; close(cmd); print "Done!"}'
a
b
Done!

否则你可能会试图关闭一条不存在的管道而且awk会高兴地什么也不做。

答案 1 :(得分:0)

在你的for循环结束后打印谢谢 (如果i == totEligible -1,则没有任何内容)