使用grep过滤文件不会输出所有行

时间:2016-05-19 18:30:20

标签: bash filter grep

我一直在使用grep尝试按照另一个文件中包含的字符串过滤文件。问题是我在数百万的记录上工作,而一些grep没有获得所有的记录。

我将结果导出到两个文件:

  1. 包含与这些字符串匹配的行
  2. 包含与这些字符串不匹配的行
  3. 两个输出的总和不是原始行数

    [ ]$ grep -vwF -f functions.csv whole-data-slice_statement2.csv > output1.csv$
    [ ]$ grep -wF -f functions.csv whole-data-slice_statement2.csv > output2.csv$
    [ ]$ wc -l whole-data-slice_statement2.csv$
    4278709 whole-data-slice_statement2.csv
    [ ]$ wc -l output1.csv$
    106692 output1.csv
    [ ]$ wc -l output2.csv$
    2326396 output2.csv
    

    有人可以帮助我理解我做错了什么吗?

2 个答案:

答案 0 :(得分:0)

我可以复制它的唯一方法是在我的整个data-slice_statement2.csv文件中使用空字符。如果其中包含特殊字符,file将返回“数据”。做... file whole-data-slice_statement2.csv

看看它是否显示“whole-data-slice_statement2.csv:data”。您可以使用tr清除文件。

编辑:这可能会清除空值而不是EOF。 tr -cd '[:graph:]\n\t ' $file >$tmp_file

答案 1 :(得分:0)

最后,似乎有些无效字符导致grep命令中止,而不是让它以完整集完成。我删除了它们,现在一切正常。 'grep -P“[\ x80- \ xFF]”file.xml'