Take the 2-minute tour ×

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?

share|improve this question
add comment

3 Answers

up vote 8 down vote accepted

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.

share|improve this answer
+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). –  Dennis Williamson Jan 15 '11 at 20:58
+1 best so far. –  Nifle Jan 16 '11 at 0:26
add comment

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.

share|improve this answer
add comment
IFS="\n\b"; for i in $MYROWOFCONTENT; do echo $i; done;
share|improve this answer
add comment

Your Answer


