Linux

使用 grep 與 awk

  • September 22, 2021

捕捉特定的模式,awk並且grep可以使用。為什麼我們應該使用一個而不是另一個?哪個更快,為什麼?

如果我有一個日誌文件並且我想獲取某種模式,我可以執行以下操作之一

awk '/pattern/' /var/log/messages

或者

grep 'pattern' /var/log/messages

我沒有做過任何基準測試,所以我不知道。有人可以詳細說明嗎?很高興了解這兩個工具的內部工作原理。

grep 很可能會更快:

# time awk '/USAGE/' imapd.log.1 | wc -l
73832

real    0m2.756s
user    0m2.740s
sys     0m0.020s

# time grep 'USAGE' imapd.log.1 | wc -l
73832

real    0m0.110s
user    0m0.100s
sys     0m0.030s

awk 是一種解釋型程式語言,而 grep 是一種已編譯的 c 程式碼程序(它還針對在文件中查找模式進行了優化)。

(注意 - 我兩次執行這兩個命令,這樣記憶體就不會潛在地扭曲結果)

有關wikipedia 上解釋語言的更多詳細資訊。

正如 Stephane 在評論中正確指出的那樣,您的里程可能會因您使用的 grep 和 awk 的實現、它所在的作業系統以及您正在處理的字元集而有所不同。

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