在awk脚本文件中使用管道|调用sort命令报错如何解决?
问题解决方法
你遇到的问题是因为awk脚本里只能写awk自身的语法,管道|和sort命令属于Shell语法,awk不识别,所以直接写进脚本会报错。给你两种解决方式:
方法一:拆分脚本与Shell管道
把command.awk里的内容只保留纯awk代码:
{for(i=1;i<=NF;i++) a[$i]++} END {for(k in a) print k,a[k]}
执行时在Shell命令行里加上管道和sort:
awk -f command.awk voleybol.org | sort -k 2 -n
这种方式和你最初在命令行直接运行的逻辑完全一致,管道由Shell负责处理,awk只做统计输出。
方法二:在awk脚本内调用Shell命令
如果一定要把完整逻辑写进awk脚本,可以用awk的管道输出功能,在END块里把结果传给sort命令,同时记得关闭管道避免资源问题:
{for(i=1;i<=NF;i++) a[$i]++} END { # 将输出通过管道传给sort命令 for(k in a) print k,a[k] | "sort -k 2 -n" # 关闭管道,防止awk进程挂起 close("sort -k 2 -n") }
执行时直接运行:
awk -f command.awk voleybol.org
这样awk会在处理完所有内容后,把统计结果通过管道交给sort排序输出。
内容的提问来源于stack exchange,提问作者zeynel
相关产品推荐
相关产品推荐

