¿Cómo puedo usar Awk para convertir una marca de tiempo de Unix a legible por humanos cuando hago un archivo de registro Tail -f?

¿Cómo puedo usar Awk para convertir una marca de tiempo de Unix a legible por humanos cuando hago un archivo de registro Tail -f?

Actualmente estoy haciendo uno tail -f mysql.logy también lo tengo.codificado por colores. Pero, ¿cómo usaría awk para convertir las marcas de tiempo de Unix a un formato legible 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'

ingrese la descripción de la imagen aquí

Respuesta1

Si tiene GNU awk ( gawk), que suele ser el caso en Linux y Cygwin no integrados, puede utilizar elstrftimefunción.

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

En un sistema integrado con BusyBox, es posible que tenga una versión más restringida de awk pero una dateutilidad que sea capaz de realizar la conversión.

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

Con solo herramientas POSIX, no hay forma de convertir entre fechas legibles por humanos y marcas de tiempo Unix aparte de hacer el cálculo usted mismo. (Sé que hay códigos shell y awk disponibles en la web para eso, pero no tengo un enlace a mano). Recomiendo asegurarse de tener algo mejor instalado, como gawk, perl, python, etc.

Respuesta2

Descartando colores - puedes usar:

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

Quitar los colores en línea con el reinicio lo hace más desafiante; Sospecho que puedes controlar/ajustar eso eliminando las secuencias de escape incluidas al final que se relacionan con elmarca de tiempoparte.

información relacionada