In primo luogo, se ti aspetti che questi timestamp rappresentino effettivamente un evento, tieni presente che poiché molti programmi eseguono il buffering di linea (alcuni in modo più aggressivo di altri), è importante pensare a questo come vicino al tempo che la linea originale avrebbe stato stampato anziché un timestamp di un'azione in corso.
Puoi anche verificare che il tuo comando non abbia già una funzione integrata dedicata a questo. Ad esempio, ping -D
esiste in alcune ping
versioni e stampa il tempo trascorso dall'epoca Unix prima di ogni riga. Se il tuo comando non contiene il suo metodo, tuttavia, ci sono alcuni metodi e strumenti che possono essere impiegati, tra gli altri:
Shell POSIX
Tenere presente che poiché molte shell memorizzano le proprie stringhe internamente come stringhe, se l'input contiene il carattere null ( \0
), la linea potrebbe terminare prematuramente.
command | while IFS= read -r line; do printf '[%s] %s\n' "$(date '+%Y-%m-%d %H:%M:%S')" "$line"; done
GNU awk
command | gawk '{ print strftime("[%Y-%m-%d %H:%M:%S]"), $0 }'
Perl
command | perl -pe 'use POSIX strftime; print strftime "[%Y-%m-%d %H:%M:%S] ", localtime'
Pitone
command | python -c 'import sys,time;sys.stdout.write("".join(( " ".join((time.strftime("[%Y-%m-%d %H:%M:%S]", time.localtime()), line)) for line in sys.stdin )))'
Rubino
command | ruby -pe 'print Time.now.strftime("[%Y-%m-%d %H:%M:%S] ")'