Tengo un script en ejecución constante que envío a un archivo de registro:
script.sh >> /var/log/logfile
Me gustaría agregar una marca de tiempo antes de cada línea que se agrega al registro. Me gusta:
Sat Sep 10 21:33:06 UTC 2011 The server has booted up. Hmmph.
¿Hay algún jujitsu que pueda usar?

Respuestas:
Puede canalizar la salida del script a través de un bucle que prefija la fecha y hora actuales:
Si va a usar esto mucho, es fácil hacer una función bash para manejar el ciclo:
fuente
readrecortar espacios en blanco al principio y de la línea. Establece IFS (separador de campo interno de bash, básicamente una lista de caracteres de espacios en blanco) para vaciar elreadcomando.echointerpretar secuencias de escape. Si realmente desea que no interfiera con el contenido (aparte de agregar fechas), reemplace elechocomando conprintf "%s %s\n" "$(date)" "$line"date -u +"%Y-%m-%dT%H:%M:%SZ"o tal vez más bonitadate +"%Y-%m-%d %T".date) para cada línea de registro, que puede ser un inconveniente masivo dependiendo de su máquina y la cantidad de registros. Prefiero sugerir usarlotssi está disponible, vea la respuesta de @willemVer
tsdesde elmoreutilspaquete de Ubuntu :O, si
$commandel almacenamiento en búfer automático (requiereexpect-devpaquete):fuente
El comando date proporcionará esa información
así que puedes
Es eso lo que querías ?
fuente
Simplemente puede hacer eco de las salidas del comando en el archivo de registro. es decir,
Realmente funciona :)
Ejemplo:
fuente
Hacer un
config.sharchivoCuando necesita enviar para usar el archivo de registro
El archivo de registro se verá así
Entonces será fácil ordenar por fecha
fuente
Te refieres a:
fuente
script.sh. El OP necesita una marca de tiempo por línea.Prueba esto
Llame a esta función de marca de tiempo en cada comando echo:
fuente
La respuesta aceptada https://serverfault.com/a/310104 puede ser un poco lenta, si se tienen que procesar muchas líneas, con la sobrecarga de iniciar el
dateproceso permitiendo aproximadamente 50 líneas por segundo en Ubuntu, y solo alrededor de 10 -20 en Cygwin.Cuando
bashse puede suponer, una alternativa más rápida sería laprintfintegrada con su%(...)Tespecificador de formato. Compararfuente
Puedes notar que awk corre rápido,
Pero, sed corre mucho más rápido,
Sin embargo, en una inspección más cercana, el conjunto no parece cambiar el tiempo,
fuente
"s/^/$(date -R) /"y ejecutando la fecha una vez antes de sed. Sed pasa una cuerda estática.yes | head -5000000 | while read line; do echo $((SECONDS)); done | uniq -cque es mucho más lento que gawk.tsLa utilidad tiene un rendimiento similar al bash loop.yes |head -5000000 |perl -ne 'print localtime."\t".$_' |uniq -cque es un poco más lento que awk.El siguiente es el contenido de mi archivo de registro
algunos de mis contenidos de shell son los siguientes
fuente
Este script imprime el resultado en la terminal y también lo guarda en el archivo de registro.
Salida de muestra:
fuente
Otra opción es configurar una función para llamar cada vez que desee generar datos en su código:
Luego, cada vez en su código, desea enviarlo a la llamada del archivo de registro
Pan comido....
fuente
Pipe a "sed":
fuente