Table of Contents

BASH - Files - Parse a line from a file

There are many ways of doing this, depending on your needs.


Method 1

Example file:

07/17 21:04:01 sndc addr unit 1 : hu P1 (TempLinc)
07/17 21:04:02 sndc func StatusReq : hc P
07/17 21:04:04 rcvi addr unit 15 : hu P15 (TempAck_5)
07/17 21:04:04 rcvi func Preset : level 11
07/17 21:04:04 Temperature = 78 : hu P0 (office_temp)
07/17 21:19:01 sndc addr unit 1 : hu P1 (TempLinc)
07/17 21:19:02 sndc func StatusReq : hc P
07/17 21:19:05 rcvi addr unit 15 : hu P15 (TempAck_5)
07/17 21:19:05 rcvi func Preset : level 11
07/17 21:19:05 Temperature = 78 : hu P0 (office_temp)
#!/bin/bash

fil=/home/test.log

# Test for existence of the test file
if [ -f $fil ]
then

  # Read through the file looking for the word Temperature =

  while read line
  do
    echo $line | grep -q Temperature
    if [ $? == 0 ]; then
    mytemp=`echo $line  | cut -d = -f2 | cut -d : -f1`
    echo "Current temperature is: $mytemp"
    fi
  done < $fil

fi

returns:

Current temperature is:  78 
Current temperature is:  78

NOTE: The -f tests that the file exists.

Other options include:

  • -b file: Checks if file is a block special file; if yes, then the condition becomes true. [ -b $file ].
  • -c file: Checks if file is a character special file; if yes, then the condition becomes true. [ -c $file ].
  • -d file: Checks if file is a directory; if yes, then the condition becomes true. [ -d $file ].
  • -e file: Checks if file exists; is true even if file is a directory but exists. [ -e $file ].
  • -f file: Checks if file is an ordinary file as opposed to a directory or special file; if yes, then the condition becomes true. [ -f $file ].
  • -g file: Checks if file has its set group ID (SGID) bit set; if yes, then the condition becomes true. [ -g $file ].
  • -k file: Checks if file has its sticky bit set; if yes, then the condition becomes true. [ -k $file ].
  • -p file: Checks if file is a named pipe; if yes, then the condition becomes true. [ -p $file ].
  • -r file: Checks if file is readable; if yes, then the condition becomes true. [ -r $file ].
  • -t file: Checks if file descriptor is open and associated with a terminal; if yes, then the condition becomes true. [ -t $file ].
  • -s file: Checks if file has size greater than 0; if yes, then condition becomes true. [ -s $file ].
  • -u file: Checks if file has its Set User ID (SUID) bit set; if yes, then the condition becomes true. [ -u $file ].
  • -w file: Checks if file is writable; if yes, then the condition becomes true. [ -w $file ].
  • -x file: Checks if file is executable; if yes, then the condition becomes true. [ -x $file ].

Only get last temperature record

#!/bin/bash
fil=/home/temp.log.ttyS0

if [ -f $fil ]
then

mytemp=`grep Temperature $fil | tail -1 | cut -d = -f2 | cut -d : -f1`
echo "Current temperature is: $mytemp"

fi