使用管道时的性能考虑因素在awk

时间:2016-05-25 15:29:14

标签: unix awk

awk -F'/' '{ print $1 |" sort " }' infile > outfile

awk -F'/' '{ print $1 }' infile | sort > outfile

如果我在awk内使用管道(或重定向),这些MVCE是否完全相同或是否存在我不知道的可移植性/性能问题。

两个命令都会产生正确的输出。

更新:自己做了一些研究 - 请参阅下面的答案。

1 个答案:

答案 0 :(得分:1)

如果在|内使用awk,则print语句的输出会累积到一个字符串中,然后是" xxx"中的shell命令。用该字符串执行。

考虑:

$ echo 1 4 2 3 | awk '{for (i=1; i<=NF; i++) print $i}'
1
4
2
3

现在尝试:

$ echo 1 4 2 3 | awk '{for (i=1; i<=NF; i++) print $i | "sort" }' 
1
2
3
4

单个字符串1\n4\n2\n3正在内部构建,然后由awk传递给sort这可以组合成更复杂的调用,例如:

awk '{ print $1 > "names.unsorted"
   command = "sort -r > names.sorted"
   print $1 | command }' names

更多关于redirection.

上的GNU awk手册