Как использовать Awk для преобразования временной метки unix в удобочитаемый формат при выполнении лог-файла Tail -f?

Как использовать Awk для преобразования временной метки unix в удобочитаемый формат при выполнении лог-файла Tail -f?

Я сейчас делаю 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 для этого, но у меня нет под рукой ссылки.) Я рекомендую убедиться, что у вас установлено что-то получше, например, gawk, perl, python и т. д.

решение2

Отказ от цветов - можно использовать:

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

Удаление цветов в соответствии со сбросом усложняет задачу; я подозреваю, что вы можете контролировать / настраивать это, удаляя конечные включенные управляющие последовательности, которые относятся квременная меткачасть.

Связанный контент