10

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

cat my_file | while read a
do
gzip "$a"
done

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?

21

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.

| improve this answer | |
  • 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). – Paused until further notice. Jan 15 '11 at 20:58
  • I noticed I seem to need a blank newline at the end when I do this... – David West Jun 18 at 17:46
3

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.

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

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.