Is there a Unix utility to prepend timestamps to stdin?

awk, shell, unix

Solution

Could try using `awk`:

<command> | awk '{ print strftime("%Y-%m-%d %H:%M:%S"), $0; fflush(); }'

You may need to make sure that `<command>` produces line buffered output, i.e. it flushes its output stream after each line; the timestamp `awk` adds will be the time that the end of the line appeared on its input pipe.

If awk shows errors, then try `gawk` instead.

Problem

I ended up writing a quick little script for this in Python, but I was wondering if there was a utility you could feed text into which would prepend each line with some text -- in my specific case, a timestamp. Ideally, the use would be something like: ``` cat somefile.txt | prepend-timestamp ``` (Before you answer sed, I tried this: ``` cat somefile.txt | sed "s/^/`date`/" ``` But that only evaluates the date command once when sed is executed, so the same timestamp is incorrectly prepended to each line.)

Original source

Related problems