Awk脚本管道改变了明显的执行顺序

时间:2018-05-12 22:36:59

标签: awk scripting piping

以下是我的一部分剧本:

END{
    for (key in data) {
        print key" "data[key]|"sort -k 2n";
    }
    print "something or other"
}

问题是,控制台输出首先显示第二个打印输出,然后显示在for循环中通过排序传输的打印输出的结果。

尝试粗暴的支撑无济于事。 我不知道如何甚至谷歌关于这个问题,如何排序收集应该排序的?我怎样才能更好地指导呢?

编辑:只是有一个实现的时刻,问题不是它捕获最后一个打印,但它实际上是在最后一次打印后执行,尽管被提前调用。

1 个答案:

答案 0 :(得分:0)

答案是Ed Morton建议的close()函数。

有关close()的详细信息,我发现https://www.gnu.org/software/gawk/manual/html_node/Close-Files-And-Pipes.html很有用。

正确的代码段因此成为:

END{
    for (key in data) {
        print key" "data[key]|"sort -k 2n";
    }
    close("sort -k 2n");
    print "something or other";
}

这样,它正确地打印出for循环中的排序输出,并且只有在打印出循环后调用的最后一个打印输出时才会打印出来。