根据 grep 匹配拆分文件

根据 grep 匹配拆分文件

如何将一个文件拆分为两个文件,其中一个文件包含与模式匹配的行,而另一个文件包含与模式不匹配的行?我想指定在另一个文件中匹配的模式。这些线是互斥的,即属于一个类别的线不能属于另一类别。我可以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

通过使用teeandbash流程替代input_file只需要从磁盘读取一次。这pee命令可以做同样的事情:

pee 'grep -F -f regexp_file    >./positive_match' \
    'grep -F -f regexp_file -v >./negative_match' < input_file

相关内容