Linux
使用 grep 與 awk
捕捉特定的模式,
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 的實現、它所在的作業系統以及您正在處理的字元集而有所不同。