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”
,并在两个位置使用该变量。