Atualmente estou fazendo um tail -f mysql.log
e 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'
Responder1
Se você possui GNU awk ( gawk
), que geralmente é o caso em Linux não embarcado e Cygwin, então você pode usar ostrftime
funçã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 date
utilitá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.