I am running a script file. I have written a while loop inside the script in which I have pipelined multiple commands like awk, sed and finally I am writing the output to a file using > operator. I am trying to add a time stamp at the starting line of the file (I am not appending the file).

Each time I run the script it should write the time stamp something like below to the file:

Time stamp

Data of the File

  • 1
    Run man date and read. Apr 25, 2016 at 21:06
  • I know how date works but I am not sure how to add this to the beginning of my file each time the script is run
    – RajuBhai
    Apr 25, 2016 at 21:09
  • 3
    What is your script like? Show us code.
    – alpert
    Apr 25, 2016 at 21:20
  • See unix.stackexchange.com/a/26797/5362 . Utility ts (from moreutils) can do this easily.
    – Dilawar
    Feb 22, 2021 at 13:58

5 Answers 5


I say create a second script like this:

echo -e "$(date)\n" # of course format date to your needs
cat <&0
exit $?

This will work like: (... all your commands & pipes...) | new_script >output.file


First echo the date and a newline, then catenate STDIN and finally exit with the last (cat's) exit code.


It would probably be easiest to simply write the time via date to the file and then append your data to it afterwards, something like this:

date > file
your_code >> file

Look into the manpage of date to find proper the proper format for your usecase


add this following or preceding your line `date "+%Y-%m-%d"` e.g. 2016-04-26

in your code printf "this is the output\t`date "+%Y-%m-%d"`"

will read as:

this is the output   2016-04-26

you can use this with echo too

you can do others like:

`date "+%b%d"` e.g. Apr-26

for other formats check man date

additional info:

` (Back Quotes) : Command Substitution

The ` character (found on the key with the ~) is very important when used in shell commands. This ` indicates that command substitution is required wherever it is used. Hence whenever ` is used, whatever part of the command is enclosed by these Backquotes marks would be executed (as if it was the only command) and then the result of that command would be substituted in the original shell command that you typed. The following explains this clearly

Source: http://www.codecoffee.com/tipsforlinux/articles/26-2.html


Use gawk, and its time functions like in this example:

ping | gawk '{print strftime("%H-%M-%S") ; print $0}'

Oops, I just saw, that the OP wants one timestamp at the beginning of the output, not one per input line like my suggestion. His mention of the while loop though implies to me that data will keep arriving for a while, and he may want to measure time2output for each of them at one point.

  • Thanks for replying. Actually my next question was this ! But I am trying to print the time in milliseconds !! Is there any way to do that ?
    – RajuBhai
    Apr 26, 2016 at 23:19


You might also want to take a look at logger, a somewhat neglected command for writing messages to the system log (or journal) in the system's standard log output format. This won't help you if your application maintains its own logfile, but depending on the circumstances, there might be good design rationales to use the standard system logging facilities instead. Just bringing this up in case, since logger adds the timestamps for you.

  • This should be the first place to start, IMO. Reinventing loggers is not a good use of time for most of us.
    – user156990
    Apr 26, 2016 at 18:04

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.