Command-Line
將 mtime 添加到 grep -c 輸出並按 mtime 對輸出進行排序
我有一個目錄,其中包含以下樣式的日誌:
info.log00001 info.log00002 info.log00003 ... info.log09999 info.log
我目前的輸出(使用 grep -c)
我需要分析偶爾發生的特定錯誤的頻率,因此請轉到該目錄並使用
grep -crw . -e "FooException BarError" | sort -n | less
獲取以下內容:./info.log00001: 1 ./info.log00002: 0 ./info.log00003: 42 ... ./info.log09999: 25 ./info.log: 0
然後,我可以
ls -lt
查看它們的修改日期並分析錯誤發生最多的時間。我想要的輸出(帶有計數和日期)
無論如何,我想找到一種方法來獲得計數和日期在同一行中的輸出。這將使我的分析更容易。我想要一些東西:
2015-09-31 10:00 ./info.log00001: 1 2015-09-31 10:15 ./info.log00002: 0 2015-09-31 10:30 ./info.log00003: 42 ... 2016-04-01 13:20 ./info.log09999: 25 2015-09-31 13:27 ./info.log: 0
附加資訊
理想情況下,我只想使用一個命令來完成此操作,但首先將
grep
’ 的輸出扔到文件中,然後處理該文件也可以。另外,我真的不關心日期格式或日期是在行尾還是行首。我只想讓文件按日期排序,從最舊的開始(這也是其名稱中編號最小的文件)
我找到了一種方法來完成與 類似的事情
awk
,但在我的情況下它不起作用,因為它從grep
’ 的輸出中解析文件名,在我的情況下,grep
’ 的輸出具有更多的文本,而不僅僅是文件的路徑。我非常感謝對此的任何回饋。
如果你有
gnu find
- 並且假設你的文件名都不包含換行符 - 你可以使用find
’s-printf
以mtime
所需的格式輸出 + 文件名,然後執行grep
以獲取計數:find . -type f -printf '%TY-%Tm-%Td %TH:%TM %p: ' -exec grep -cw "whatever" {} \; | sort -k1,1 -k2,2
或者,
zsh
您可以使用 glob 並按修改時間排序(通過glob 限定符-.
選擇正常文件,按mtimeOm
降序排序),然後為每個文件列印使用模組、文件名,然後再次通過:mtime
stat
grep
zmodload zsh/stat for f in ./**/*(.Om) do printf '%s %s\t%s %s: ' $(zstat -F '%Y-%b-%d %H:%M' +mtime -- $f) $f grep -cw "whatever" $f done