Looping with Floating-Point Values
Problem
The for loop with arithmetic
expressions only does integer arithmetic. What do I do for
floating-point values?
Solution
Use the seq command to generate your floating-point values, if your system provides it:
for fp in $(seq 1.0 .01 1.1)
do
echo $fp; other stuff too
doneor:
seq 1.0 .01 1.1 | \
while read fp
do
echo $fp; other stuff too
doneDiscussion
The seq command will generate a sequence of
floating-point numbers, one per line. The arguments to
seq are the starting value, the increment, and the
ending value. This is not the intuitive order if
you are used to the C language for
loop, or if you learned your looping from BASIC (e.g., FOR I=4 TO 10 STEP 2). With
seq the increment is the
middle argument.
In the first example, the $() runs the command in a subshell and
returns the result with the newlines replaced by just whitespace, so
each value is a string value for the for loop.
In the second example, seq is run as a
command with its output piped into a while loop that reads each line and does
something with it. This would be the preferred approach for a really
long sequence, as it can run the seq command in
parallel with the while. The for loop version has to run
seq to completion and put all of its output on the
command line for the for statement.
For very large sequences, this could be time- and
memory-consuming.
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access