[英]Date output as command-line argument
我想計算最近5分鍾內與模式匹配的系統日志條目。
我可以對時間進行硬編碼並獲得預期的輸出:
$ awk '$3>"16:20:00"' /var/log/syslog | grep "UFW BLOCK" | wc -l
1502
所需時間可以用以下方法構造:
$ date --date='5 minutes ago' '+%H:%M:%S'
16:00:00
我如何才能將它們以單線方式加入?
我嘗試設置環境變量,但是它返回整個日志。 我看不到我的錯誤。
$ logdate=`date --date='5 minutes ago' '+%H:%M:%S'` && awk '$3>"$logdate"' /var/log/syslog | grep "UFW BLOCK"
您可以使用:
awk -v dt="$(date --date='5 minutes ago' '+%H:%M:%S')" '$3>dt && /UFW BLOCK/' /var/log/syslog
注意如何通過使用awk來執行搜索模式來避免最后一次grep
。
您的awk命令是單引號,它將禁用外殼程序的字符串插值。 檢查此類錯誤的一種簡單方法是將awk
更改為echo
並查看其含義( $3>"$logdate"
)。 如果您使用雙引號並適當地轉義了字符( "\\$3>\\"$logdate\\""
,那么您將傳遞給awk
您想要的參數。
$ logdate=`date --date='5 minutes ago' '+%H:%M:%S'` && awk "\$3>\"$logdate\"" /var/log/syslog | grep "UFW BLOCK"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.