Como posso usar o Awk para converter um carimbo de data/hora unix em legível por humanos ao fazer um arquivo de log Tail -f?

Como posso usar o Awk para converter um carimbo de data/hora unix em legível por humanos ao fazer um arquivo de log Tail -f?

Atualmente estou fazendo um tail -f mysql.loge também tenhocodificado por cores. Mas como eu usaria o awk para converter os carimbos de data/hora Unix em um formato legível por humanos?

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'

insira a descrição da imagem aqui

Responder1

Se você possui GNU awk ( gawk), que geralmente é o caso em Linux não embarcado e Cygwin, então você pode usar ostrftimefunção.

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

Em um sistema embarcado com BusyBox, você pode ter uma versão mais restrita do awk, mas um dateutilitário capaz de fazer a conversão.

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);
}

Com apenas ferramentas POSIX, não há como converter entre datas legíveis por humanos e carimbos de data/hora Unix, a não ser fazer o cálculo sozinho. (Eu sei que há código shell e awk disponível na web para isso, mas não tenho um link à mão.) Recomendo verificar se você tem algo melhor instalado, como gawk, perl, python, etc.

Responder2

Descartando cores - você pode usar:

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

Remover as cores alinhadas com a redefinição torna tudo mais desafiador; Eu suspeito que você pode controlar/ajustar isso removendo as sequências de escape incluídas no final relacionadas aocarimbo de data/horaparte.

informação relacionada