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 タイムスタンプを変換する方法はありません。(そのためのシェルと awk のコードが Web 上で入手できることは知っていますが、手元にリンクがありません。) gawk、perl、python などのより適切なツールがインストールされていることを確認することをお勧めします。

答え2

色の破棄 - 次の色を使用できます:

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

リセット時に色を削除すると、さらに難しくなります。末尾に含まれるエスケープシーケンスを削除することで、これを制御/調整できると思います。タイムスタンプ部分。

関連情報