在執行 Tail -f 日誌檔案時,如何使用 Awk 將 unix 時間戳記轉換為人類可讀的時間戳記?

在執行 Tail -f 日誌檔案時,如何使用 Awk 將 unix 時間戳記轉換為人類可讀的時間戳記?

我目前正在做一個tail -f mysql.log並且也有它顏色編碼。但是我如何使用 awk 將 unix 時間戳轉換為人類可讀的格式?

tail -f /var/lib/mysql/mysql-slow.log | awk '/User@Host:/ { $0 = "\033[32m" $0 "\033[39m" } /Query_time:/ { $0 = "\033[36m" $0 "\033[39m" } 1'

在此輸入影像描述

答案1

如果您有 GNU awk ( gawk),這在非嵌入式 Linux 和 Cygwin 上通常是這種情況,那麼您可以使用strftime功能。

if (match($0, /^(.*timestamp=)([0-9]+)(.*)$/, parts)) {
    time = strftime("%F %T", parts[2]);
    $0 = parts[1] time parts[3];
}

在具有 BusyBox 的嵌入式系統上,您可能會有一個更受限制的 awk 版本,但有一個date能夠執行轉換的實用程式。

if (match($0, /timestamp=[0-9]+/)) {
    system("date +'%F %T' -d " substr($0, RSTART+10, RLENGTH-10)) | getline time;
    $0 = substr($0, 1, RSTART) time substr($0, RSTART+RLENGTH);
}

僅使用 POSIX 工具,除了自己計算之外,無法在人類可讀的日期和 Unix 時間戳記之間進行轉換。 (我知道網路上有 shell 和 awk 程式碼可用,但我沒有方便的連結。)我建議確保您安裝了更好的東西,例如 gawk、perl、python 等。

答案2

丟棄顏色 - 您可以使用:

# | piped at the end 
awk -F'SET timestamp=' 'NF > 1{ system("date -d @" $2) }'

與重置同時剝離顏色使其更具挑戰性;我懷疑您可以透過刪除與結尾相關的轉義序列來控制/調整它時間戳部分。

相關內容