我需要过滤列表文件(top 命令的输出)以获取一些信息:
似乎我无法使用 grep 和 awk 绑定查找:
我的第一次尝试:
find . -name "high-cpu.out" -exec grep "jboss" | awk '{ print $5 }' {} \;
find: missing argument to `-exec'
awk: fatal: cannot open file `{}' for reading (No such file or directory)
Run Code Online (Sandbox Code Playgroud)
第二次尝试:
find . -name "high-cpu.out" -exec grep "jboss" {} \ | awk '{ print $5 }';
find: missing argument to `-exec'
Run Code Online (Sandbox Code Playgroud)
有什么帮助吗?谢谢
我建议使用 AWK 来匹配模式,而不是grep
:
find . -name "high-cpu.out" -exec awk '/jboss/ { print $5 }' {} +\n
Run Code Online (Sandbox Code Playgroud)\n这也允许使用 的+
变体-exec
,从而减少awk
调用次数。
当你尝试时
\nfind . -name "high-cpu.out" -exec grep "jboss" | awk '{ print $5 }' {} \\;\n
Run Code Online (Sandbox Code Playgroud)\n外壳首先处理管道,而不是find
。这导致find
失败, \xe2\x80\x9cmissing argument to \xe2\x80\x98-exec\xe2\x80\x99\xe2\x80\x9d: was {} \\;
\xe2\x80\x99t 包含在传递给它的参数中(它们被传递给awk
)。
您的第二次尝试失败了,因为find
\xe2\x80\x99 无法看到结束分号,因为它没有与参数分开awk
。在任何情况下,管道都不会工作,因为find
它不会委托给 shell。