When I want to do something with each line in a file I usually write

cat my_file | while read a
gzip "$a"

The gzip is just an example it can be anything.

What I'm wondering is if there is another way to get the lines than cat file | while read?

3 Answers 3


You don't need to use cat:

while read line; do
    echo "$line"
done < my_file

I don't think there's a simpler way though.

  • 1
    +1 In addition to avoiding a UUoC, doing it this way also prevents creating a subshell so the variables set during the loop will still be available after the loop (also you will still be in a directory that you cd to, if you do that). Jan 15, 2011 at 20:58
  • I noticed I seem to need a blank newline at the end when I do this...
    – David West
    Jun 18, 2020 at 17:46

The simplest, I think, would be to use xargs, e.g.,

xargs -L1 gzip < my_file

The -L1 option tells xargs to process one input line at a time. You might take a look at GNU parallel, too, which is very similar to xargs but more powerful in some situations.

IFS="\n\b"; for i in $MYROWOFCONTENT; do echo $i; done;

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.