Awk
結合使用 find + grep + awk
我需要過濾列表文件(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
:find . -name "high-cpu.out" -exec awk '/jboss/ { print $5 }' {} +
這也允許使用 的
+
變體-exec
,從而減少awk
呼叫。當你嘗試
find . -name "high-cpu.out" -exec grep "jboss" | awk '{ print $5 }' {} \;
外殼首先處理管道,而不是
find
。這導致find
“缺少’-exec’的參數”失敗:{} \;
沒有包含在傳遞給它的參數中(它們被傳遞給awk
)。您的第二次嘗試失敗,因為
find
看不到結束分號,因為它沒有與awk
論點分開。在任何情況下,管道都不會工作,因為find
它沒有委託給 shell。