Anche se non credo che Pierr avesse questa preoccupazione, avevo bisogno di una soluzione che non ritardasse l'output della "coda" di un file dal vivo, poiché volevo monitorare simultaneamente più registri di allerta, anteponendo a ciascuna riga il nome del rispettivo registro .
Sfortunatamente, sed, cut, ecc. Hanno introdotto troppi buffering e mi hanno impedito di vedere le linee più attuali. Il suggerimento di Steven Penny di usare l' -s
opzione di nl
era intrigante e i test hanno dimostrato che non introduceva il buffering indesiderato che mi riguardava.
Ci sono stati un paio di problemi con l'uso nl
, tuttavia, legati al desiderio di eliminare i numeri di riga indesiderati (anche se non ti interessa l'estetica di esso, potrebbero esserci casi in cui l'uso delle colonne extra sarebbe indesiderabile). Innanzitutto, l'uso di "cut" per eliminare i numeri reintroduce il problema di buffering, quindi si rovina la soluzione. In secondo luogo, l'uso di "-w1" non aiuta, dal momento che questo NON limita il numero di riga a una singola colonna, ma si allarga appena sono necessarie più cifre.
Non è carino se vuoi catturarlo altrove, ma dato che è esattamente quello che non avevo bisogno di fare (tutto era già stato scritto per registrare i file, volevo solo guardarne diversi contemporaneamente in tempo reale), il migliore modo per perdere i numeri di riga e avere solo il mio prefisso era quello di iniziare il -s
stringa con un ritorno a capo (CR o ^ M o Ctrl-M). Quindi per esempio:
#!/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
compiti leggeri come questo. Se si conosce "prefisso", è molto facile scegliere un carattere non da "prefisso".