2013-04-03 68 views
4

我經常使用grep,並且熟悉它能夠返回匹配行(默認)和不匹配行(使用-v參數)。但是,我希望能夠通過grep一次文件來分隔匹配和不匹配的行。如何保存grep的匹配和不匹配

如果這是不可能的,請讓我知道。我意識到我可以在perl或awk中輕鬆地完成這項工作,但是如果可以使用grep,我很好奇。

謝謝!

+0

更好地用Perl去,awk不支持Perl的正則表達式,但grep呢... – Kent

+0

有用的知識...另外,perl腳本和grep之間的模式匹配比較速度如何?我在數十億行的100G文件上使用這些命令。 – jake9115

+0

你是什麼意思「一次grep文件」?可以使用tmp文件嗎? :D你想有兩個輸出文件?一場比賽與不匹配? – Kent

回答

5

如果它不必須是grep的 - 這是一種基於圖案的單次分裂 - 沒有找到的模式發現>文件1模式>文件2

awk '/pattern/ {print $0 > "file1"; next}{print $0 > "file2"}' inputfile 
+0

感謝您的建議...... awk是否支持完整正則表達式(perl樣式正則表達式)?之前的帖子建議避免了awk,因爲正則表達式的限制。 – jake9115

+0

你決定你需要什麼 - 你說的'unix'可能會或可能不會排除GNU awk - http://www.math.utah.edu/docs/info/gawk_5.html。在solaris上,nawk具有體面的正則表達式特徵。 –