Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Awk脚本管道更改外观执行顺序_Awk_Scripting_Piping - Fatal编程技术网

Awk脚本管道更改外观执行顺序

Awk脚本管道更改外观执行顺序,awk,scripting,piping,Awk,Scripting,Piping,以下是我脚本的一部分: END{ for (key in data) { print key" "data[key]|"sort -k 2n"; } print "something or other" } 问题是,控制台输出首先显示第二个打印输出,然后显示通过for循环中的sort管道传输的打印输出的结果 试过粗牙套也没用。 我不知道如何甚至谷歌关于这个问题,排序如何收集它应该排序?我怎样才能指挥得更好 编辑:刚刚有一个认识的时刻,问题不是它捕捉到最后

以下是我脚本的一部分:

END{
    for (key in data) {
        print key" "data[key]|"sort -k 2n";
    }
    print "something or other"
}
问题是,控制台输出首先显示第二个打印输出,然后显示通过for循环中的sort管道传输的打印输出的结果

试过粗牙套也没用。 我不知道如何甚至谷歌关于这个问题,排序如何收集它应该排序?我怎样才能指挥得更好

编辑:刚刚有一个认识的时刻,问题不是它捕捉到最后一次打印,而是它实际上在最后一次打印后执行,尽管之前被调用过。

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

有关close()的详细信息,我发现它很有用

因此,正确的代码段变成:

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

通过这种方式,它可以正确地打印出for循环中已排序的输出,并且只有在这之后才能打印出循环后调用的最后一个打印输出。

在awk手册页中查找
close()
。如果您需要更多帮助,那么您的问题应该包括简洁、可测试的示例输入和预期输出。请参阅。不要在执行和结束时使用相同的硬编码字符串,请定义一个变量,如
cmd=“sort-k-2n”
,并在两个位置使用该变量。