Pertama, jika Anda mengharapkan cap waktu ini benar-benar mewakili suatu peristiwa, ingatlah bahwa karena banyak program melakukan buffering garis (beberapa lebih agresif daripada yang lain), penting untuk menganggap ini sedekat waktu dengan garis asli akan memiliki telah dicetak daripada cap waktu tindakan yang sedang berlangsung.
Anda mungkin juga ingin memeriksa apakah perintah Anda belum memiliki fitur bawaan yang didedikasikan untuk melakukan ini. Sebagai contoh, ping -D
ada dalam beberapa ping
versi, dan mencetak waktu sejak zaman Unix sebelum setiap baris. Namun, jika perintah Anda tidak mengandung metode sendiri, ada beberapa metode dan alat yang dapat digunakan, antara lain:
Shell POSIX
Ingatlah bahwa karena banyak shell menyimpan string mereka secara internal sebagai cstring, jika input berisi karakter null ( \0
), ini dapat menyebabkan garis berakhir sebelum waktunya.
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'
Python
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 )))'
Rubi
command | ruby -pe 'print Time.now.strftime("[%Y-%m-%d %H:%M:%S] ")'