Tail -fログファイルを実行するときにAwkを使用してUnixタイムスタンプを人間が読めるタイムスタンプに変換するにはどうすればよいですか?

Tail -fログファイルを実行するときにAwkを使用してUnixタイムスタンプを人間が読めるタイムスタンプに変換するにはどうすればよいですか?

私は現在1つを作業しており、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

gawk通常、組み込みのLinuxおよびCygwinの場合であるGNU awk()がある場合は、次のものを使用できます。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コードがあることを知っていますが、便利なリンクはありません。)gawk、perl、pythonなどのより良いものがインストールされていることを確認することをお勧めします。

おすすめ記事