如何将一个文件拆分为两个文件,其中一个文件包含与模式匹配的行,而另一个文件包含与模式不匹配的行?我想指定在另一个文件中匹配的模式。这些线是互斥的,即属于一个类别的线不能属于另一类别。我可以grep
分别执行两次,但我只想迭代该文件一次。
我现在一直在做的是:
grep -F -f regexp_file input_file>./positive_match
grep -F -f -v regexp_file input_file>./negative_match
答案1
问题在于部分输入(仅从磁盘读取输入文件一次)和部分处理(仅迭代文件一次)。
由于grep
只能输出到一个流,因此无法仅使用 的一个实例来完成作业的迭代部分grep
。
作业的输入部分可以改进:
tee >(grep -F -f regexp_file >./positive_match) < input_file | \
grep -F -f regexp_file -v >./negative_match
通过使用tee
andbash
的流程替代,input_file
只需要从磁盘读取一次。这pee
命令可以做同样的事情:
pee 'grep -F -f regexp_file >./positive_match' \
'grep -F -f regexp_file -v >./negative_match' < input_file