我在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)线下方,但它并没有这样做。知道问题可能是什么?提前谢谢。
答案 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,则没有任何内容)