Ask a question »

How To Read a Linux File Line by Line

May 2016

This article will introduce the concept of playing a file line by line in Linux with the help of examples and best user tips. We'll walk you through some of the most common errors made when reading a file on the Linux platform, and show you examples of how the for loop and while loop outputs differ. We'll also provide you with some tips and examples on how to initiate a loop, and how to use the while loop output.

How To Read a File Line by Line

Common Errors with For Loops

One of the most common errors when using scripts bash on GNU/Linux is to read a file line by line by using a for loop (for line in $ (cat file.txt) do. ..). In this example, the for loop leads to an assessment for each line, rather than as assessment of every word in the file.

It is possible to change the value of the variable $ IFS (Internal Field Separator, internal field separator) with a for loop before starting the loop.

Here is a sample output with a for loop:
for line in $ (cat file.txt) do echo "$ line" done


The solution is to use a while loop coupled with the internal read.

It is also possible to get the result with a for loop, provided you change the value of the variable $ IFS (Internal Field Separator, internal field separator) before starting the loop.

While Loop Example

The while loop remains the most appropriate and easiest way to read a file line by line.

while read line           
done <file

For Loop Example

The starting file:
This is line 1     

  • This is line 2 *This is line 3 *This is line 4 *This is line 5

The instructions in the command line:
while read line; do echo -e "$line\n"; done < file.txt

or in a "bash" script:
#! / bin / bash           

while read line
echo-e "$ line \ n"
done <file.txt

The output on the screen (stdout):
This is line 1

This is line 2

This is line 3

This is line 4

This is line 5

Tips for For Loops

From a structured file (such as an address book or /etc/passwd), it is entirely possible to retrieve the values of each field and assign them to several variables with the command 'read'. Be careful to properly assign the IFS variable with good field separators (space by default).

#! /bin/bash          

while IFS=: read user pass uid gid full home shell
echo -e "$full :\n\
Pseudo : $user\n\
UID :\t $uid\n\
GID :\t $gid\n\
Home :\t $home\n\
Shell :\t $shell\n\n"
done < /etc/passwd


while read i; do echo -e "Parameter : $i"; done < <(echo -e "a\nab\nc")

How To Initiate a Loop

Although the while loop remains the easiest method for reading a file line by line, it does have its side effects. The while loop will obliterate the formatting of lines, including spaces and tabs. Furthermore, the for loop coupled with a change of IFS helps keep the structure of the document output.


old_IFS=$IFS      # save the field separator           
IFS=$'\n' # new field separator, the end of line
for line in $(cat fichier)
IFS=$old_IFS # restore default field separator

For unlimited offline reading, you can download this article for free in PDF format:

See also

In the same category

Cómo leer un archivo línea por línea
By Carlos-vialfa on August 11, 2008
Comment lire un fichier ligne par ligne
By jipicy on January 27, 2007
Como ler um arquivo linha por linha
By pintuda on December 15, 2009
Original article published by jipicy. Translated by deri58. - Latest update by ChristinaCCM
This document entitled « How To Read a Linux File Line by Line » from CCM ( is made available under the Creative Commons license. You can copy, modify copies of this page, under the conditions stipulated by the license, as this note appears clearly.