web-dev-qa-db-ja.com

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'

enter image description here

2

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などのより適切なものがインストールされていることを確認することをお勧めします。

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

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

リセットに合わせて色を取り除くと、より困難になります。 timestampの部分に関連する最後に含まれるエスケープシーケンスを削除することで、それを制御/調整できると思います。

0
aphorise