我需要过滤列表文件(top 命令的输出)以获取一些信息:
- 首先,我需要列出带有查找的文件
- 然后,我需要用 grep 查找带有图案的线条
- 最后,我需要挑选一个我感兴趣的专栏。
似乎我无法将 find 与 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)
第二次尝试:
find . -name "high-cpu.out" -exec grep "jboss" {} \ | awk '{ print $5 }';
find: missing argument to `-exec'
有什么帮助吗?谢谢
我建议使用 AWK 来匹配模式,而不是
grep
:这也允许使用 的
+
变体-exec
,从而减少awk
调用。当你尝试
外壳首先处理管道,而不是
find
。这导致find
“缺少'-exec'的参数”失败:{} \;
没有包含在传递给它的参数中(它们被传递给awk
)。您的第二次尝试失败,因为
find
看不到结束分号,因为它没有与awk
论点分开。在任何情况下,管道都不会工作,因为find
它没有委托给 shell。直到 exec 命令在“|”处被破坏/完成,这才能工作 level 所以 {} 不能被 awk 子命令解释。
所以你必须做
或者
但是在同一工作中使用多个命令 sed+awk+grep 绝不是一个好主意;您必须选择其中之一并调整模式上的正则表达式以满足您的需求