0

How can I read a line from a file into two variables: one variable for the last field, and the the other variable for the other fields?

For example, I have a file:

hello world! 10s
It is a good day. 4m
...

I would like to read each line into two variables: one variable contains the time interval at the end of the line, and the other variable contains the fields before it. I was wondering how to do it; this is as far as I have gotten:

while read line 
do
 ... # split $line into $message and $interval
 myprogram "$message" "$interval"
done < "$inputfile" 
K7AAY
3,9264 gold badges26 silver badges40 bronze badges
asked Nov 8, 2018 at 22:38
7
  • Will the interval ever contain white space? Commented Nov 8, 2018 at 23:02
  • Thanks. The time interval will be used as argument to sleep. If sleep accepts an argument with a space within it, then yes; otherwise, no. Commented Nov 8, 2018 at 23:04
  • Obligatory unix.stackexchange.com/q/169716/117549 Commented Nov 8, 2018 at 23:44
  • @JeffSchaller Could you tell me how I should rewrite my while loop? I have looked at the link Commented Nov 8, 2018 at 23:48
  • It's apparent that reading into variables is not your final destination; there might be other/better ways to accomplish your goal, if we knew what it was. Commented Nov 8, 2018 at 23:51

1 Answer 1

3

As long as the interval contains no whitespace this should work:

#!/bin/bash
input=/path/to/input
while read -r line; do
 message=${line% *}
 interval=${line##* }
 echo "$message"
 sleep "$interval"
done < "$input"

${line% *} Will strip everything after the last space character

${line##* } Will strip everything before the last space character

answered Nov 8, 2018 at 23:06

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.