Table of Contents

Reading Lines From Files


Links & references:


While Read

The shell read command inputs entire lines.

We can do the following to send a file, line by line, to a while read loop:

# Non-ideal method.
# File we are going to process is represented by $filename.
cat $filename |
while read line; do
   echo $line   # simple echo of each line
done

But some people have a problem with this. They say that you should instead do the following, which represents the “BEST” way to read a file line by line in a shell script:

# BEST method.
# File we are going to process is represented by $filename.
while read line; do
   echo $line   # simple echo of each line
done < $filename

For Loop

For files that contain only one word or one field per line, where it is guaranteed that no white space characters will appear, a for loop can be used like this:

# WORST method.
# File we are going to process is represented by $filename.
for line in $(cat $filename); do
   echo $line   # simple echo of each line
done

This is considered the absolute "WORST" way to try to read a file, line by line. But a Bash internal variable ($IFS) (internal field separator) can mitigate this for files that contain more than one word per line. See examples at http://en.kioskea.net/faq/1757-how-to-read-a-file-line-by-line.