Si bien no creo que pierr tuviera esta preocupación, necesitaba una solución que no retrasara la salida de la "cola" en vivo de un archivo, ya que quería monitorear varios registros de alertas simultáneamente, con el prefijo de cada línea con el nombre de su registro respectivo .
Desafortunadamente, sed, cut, etc. introdujo demasiado buffering y me impidió ver las líneas más actuales. La sugerencia de Steven Penny de usar la -s
opción de nl
era intrigante, y las pruebas demostraron que no introdujo el almacenamiento en búfer no deseado que me preocupaba.
Sin nl
embargo, hubo un par de problemas con el uso , relacionados con el deseo de eliminar los números de línea no deseados (incluso si no le importa la estética de la misma, puede haber casos en los que no sería deseable usar las columnas adicionales). Primero, usar "cortar" para eliminar los números reintroduce el problema de almacenamiento en búfer, por lo que arruina la solución. En segundo lugar, el uso de "-w1" no ayuda, ya que esto NO restringe el número de línea a una sola columna, simplemente se amplía a medida que se necesitan más dígitos.
No es bonito si quieres capturar esto en otro lugar, pero dado que eso es exactamente lo que no necesitaba hacer (ya se estaba escribiendo todo en los archivos de registro, solo quería ver varios a la vez en tiempo real), lo mejor La forma de perder los números de línea y tener solo mi prefijo era comenzar la -s
cadena con un retorno de carro (CR o ^ M o Ctrl-M). Así por ejemplo:
#!/bin/ksh
# Monitor the widget, framas, and dweezil
# log files until the operator hits <enter>
# to end monitoring.
PGRP=$$
for LOGFILE in widget framas dweezil
do
(
tail -f $LOGFILE 2>&1 |
nl -s"^M${LOGFILE}> "
) &
sleep 1
done
read KILLEM
kill -- -${PGRP}
sed
tareas livianas como esta. Si se conoce el "prefijo", es muy fácil elegir un personaje que no sea del "prefijo".