OT?: break up an incoming data stream into fixed length lines? in bash?

Thomas Kaiser ubuntu at kaiser-linux.li
Sun Apr 8 13:14:56 UTC 2018


On 06.04.2018 20:04, Dave Stevens wrote:
> I'm using U16.04 to read data from a sensor. The incoming serial data
> stream has no newlines, just continuous bytes. In the datastream the
> letters B and M occur together at the start of every 24 byte
> subsequence. I'm reading the data using getserial with appropriate
> speed and parity parms. I don't see a simple way to break it up into
> lines with each line having 24 bytes. Does anyone care to suggest a
> method? I'd use a bash function if there is one.
> 
> TIA,
> 
> Dave
> 

Hello Dave

I use following bash script to read data from a serial port (USB <-> RS232):

#!/bin/bash
# Receive remote weather data from USB-WDE1

# Set the correct interface parameters
stty < /dev/ttyUSB0 9600 -brkint -opost -onlcr -echo

# Loop forever to read data from USB-WDE1
socat /dev/ttyUSB0,b9600 STDOUT | \
while read line
do
      if [[ "${line%%;*}" == '$1' ]] ; then
	#echo $line
          # format data
          tmp=`echo "${line#?1;1;}" | tr ';,' ':.'`
          data=`echo "N${tmp%%0}" | sed 's/::/:U:/g' | sed 's/::/:U:/g'`
          data=${data%%:}
	echo `date +%R.%S:` $line
      fi
done

It is a long time since I implemented this with the help of examples from various web sites. Therefore, I don't remember how the data formating is done in detail.
Maybe this example gets you running.

Thomas




More information about the ubuntu-users mailing list