反向匹配的偏差grep行为

反向匹配的偏差grep行为,grep,inverse,Grep,Inverse,我有一个包含标识符(每行一个)的文件,我希望通过未指定的分析运行该文件。如果一切正常,分析将输出另一个具有相同标识符的列表(不一定以相同的顺序) 但是,结果表明,没有对某些输入标识符进行分析,并且这些标识符不存在于输出文件中。这是因为互联网连接中断,所以程序跳过了一些标识符,并在互联网恢复时成功地继续向下搜索。这意味着被跳过的标识符散布在输入文件中 因此,输入文件中会有一些行在输出文件中不存在,我想提取这些行并重新运行分析。这听起来像是一个简单的grep-vf命令,但这里是它变得有点混乱的地方

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

但是,结果表明,没有对某些输入标识符进行分析,并且这些标识符不存在于输出文件中。这是因为互联网连接中断,所以程序跳过了一些标识符,并在互联网恢复时成功地继续向下搜索。这意味着被跳过的标识符散布在输入文件中

因此,输入文件中会有一些行在输出文件中不存在,我想提取这些行并重新运行分析。这听起来像是一个简单的grep-vf命令,但这里是它变得有点混乱的地方

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

fgrep -vf output input | wc-l
我得到的是9990而不是10000。所以在某处,10个标识符丢失了。我已经检查了问题是否是由Windows EOFs或选项卡引起的(在此之前,grep也有其他类型的意外行为),但这不是问题所在。我的标题包含大小字母、数字和下划线,但没有其他字符e。g

Si_d14LSK_TRRt_Pmkk_comp10_c0_seq2
标识符的输出列表是通过执行以下操作生成的

ls -lh dir | sed "1d" | sed "/.* //" | sed "s/.xml//" > output
其中,分析的前一步骤为每个输入标识符生成了一个文件

有人知道可能导致这种异常grep行为的任何上下文因素(比如eof)吗?或者建议另一种方法来代替fgrep-vf

我在使用GNU grep 2.10的Ubuntu12.04.4 LTS上。

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

你想要一个吗

grep-Fvxf输出输入#匹配整行
grep-Fvwf输出输入#匹配整个单词
# ......^

awk总是有这样的方法:
awk'FNR==NR{a[$0];next}!(a中的$0)“文件a文件B
。这显示了
fileB
中没有出现在
fileA
中的所有行。这非常有效!我的一些标识符以e结尾。Gseq1可能很好地匹配与近端相同但以seq12或类似结尾的标识符。