Shell script make lines in one huge file into two seperate files in one go?

Viewed 77

Currently My shell script iterate the lines in one huge file two times: (What I want to do is just like the shell script below.)

grep 'some_text' huge_file.txt > lines_contains_a.txt
grep -v 'some_text' huge_file.txt > lines_not_contains_a.txt

but it is slow.

How to do the same thing only iterate the lines once?

Thanks!

2 Answers

With GNU awk:

awk '/some_text/  { print >> "lines_contains_a.txt" }
     !/some_text/ { print >> "lines_not_contains_a.txt" }' huge_file.txt

With sed:

sed -n '/some_text/  w lines_contains_a.txt
        /some_text/! w lines_not_contains_a.txt'  huge_file.txt
Related