Datalogging, Timestamp, & Monitor Arduino Data With an Incredible Bash-One-Liner


Introduction: Datalogging, Timestamp, & Monitor Arduino Data With an Incredible Bash-One-Liner

The description doesn't fit on one line -- but the code does!

This is a bash one-liner for logging data from the Arduino, and for processing (e.g. timestamping, reacting to sensor readings, etc.) and then redirecting data file.

I have tried this out on Mac Os X, but I'll verify it on the Raspberry Pi right away (as linux can perform nanosecond timestamping).


cat /dev/cu.usbmodem1421 | awk '{ for (i=0; i<NF; i++) printf $i + system("date +,%s")}'

To use with your arduino:

Just replace the /dev/cu.usbmodem1421 with your arduino's serial port (an easy way to find this is to see which is checked in the Tools -> Port  of the Arduino IDE menu)

(If you have both /dev/cu.usbmodem and /dev/tty.usbmodem, then use the /dev/cu.usbmodem one)

Real-Time Monitoring:

Real-time monitoring and command line reactions are simple to add-on, for these examples visit (and please star) the project's github.



    • Woodworking Contest

      Woodworking Contest
    • Casting Contest

      Casting Contest
    • Oil Contest

      Oil Contest

    We have a be nice policy.
    Please be positive and constructive.





    Thank you so much for this interesting project. But, did you manage to try it on raspberry?

    And, if I want to to timestamp sensor readings using GPS synchronized timing do you know how it can be implemented?

    Thank you,

    Alireza, Geophysicist

    Do you need an internet connection for the timestamp to work?

    1 reply

    Hi Jsonius,

    Thanks for the question: no internet connection is required for this method to work. It uses the system's own `date` utility, and can be used completely offline.

    -- Greg

    Good effort here - there's a lot to learn and use in Linux!

    The command ts (in the Debian/Raspbian/Ubuntu package moreutils) might also do what I think you're trying to do here. Also, if you use gnu awk, it has a strftime function, so you can avoid the system() call and do

    gawk '{print strftime("%s ") $0}'

    You might also want to try grabserial.