Awk

結合使用 find + grep + awk

  • October 11, 2021

我需要過濾列表文件(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。

引用自:https://unix.stackexchange.com/questions/672777