反向匹配的偏差grep行为

时间:2015-04-28 12:27:58

标签: grep inverse

我有一个包含标识符的文件(每行一个),我希望通过一个未指定的分析运行。如果一切运行完美,分析将输出具有相同标识符的另一个列表(不一定是相同的顺序)。

但是,事实证明,没有对某些输入标识符进行分析,并且输出文件中不存在这些分析。这是因为互联网连接失败了,因此程序跳过了一些标识符,并在互联网恢复时继续成功进一步下载。这意味着跳过的标识符散布在输入文件中。

因此输入文件中会有一些输出文件中没有的行,我想提取这些并重新运行我的分析。这听起来像一个简单的grep -vf命令,但这里有点令人困惑。

我知道我的输入文件有100000行。我也知道我的输出文件有9000行。差异应合理地为100000-90000 = 10000个标识符。但是当我跑步时

grouped

我得到了9990而不是10000.所以在某处,有10个标识符丢失了。我已经检查过问题是由于Windows EOF或标签引起的(由于这个原因,grep之前还有其他类型的意外行为),但这不是问题。我的标题包含大小写字母,数字和下划线,但没有其他字符e。克。

fgrep -vf output input | wc-l

标识符的输出列表是通过执行

生成的
Si_d14LSK_TRRt_Pmkk_comp10_c0_seq2

分析的上一步为每个输入标识符生成一个文件。

有没有人知道任何可能导致这种不正常的grep行为的上下文因素(如EOF)?或建议采用另一种方法来代替fgrep -vf?

我使用的是GNU grep 2.10的Ubuntu 12.04.4 LTS。

1 个答案:

答案 0 :(得分:2)

您的“输出”标识符可能与“输入”文件的子字符串匹配。例如,“输出”包含foo,“输入”包含foofoobar

你想要一个

grep -Fvxf output input   # match a whole line
grep -Fvwf output input   # match a whole word
# ......^