我在一个文本文件中有一个包含大约 2300 万个哈希值的列表,每行一个哈希值。称之为 hashes.txt 我在另一个文本文件中有一个令人讨厌的哈希值列表(app 40),同样每行一个哈希值。将其命名为 culls.txt
我正在尝试使用 culls.txt 中的模式执行反向 grep,也就是说,我想输出与剔除列表中的任何模式都不匹配的任何行。
grep -v -F -f culls.txt hashes.txt > Output.txt
正在发生的事情是,只有 40 个左右的列表中的最后一个哈希值被删除了。前面几行的所有哈希值均保留。我很受阻。建议?并且,是的,这些值位于哈希文件中;->
答案1
仅识别最后一个哈希的事实可能表明除最后一行之外的所有行都存在行结束问题。
我已经在我的系统(Ubuntu 14.04;grep (GNU grep) 2.16)上使用以下文件对此进行了测试:
$ cat culls.txt
h00
h10
h20
h30
h40
$ cat culls2.txt
h00
h10
h20
h30
h40
$ cat hashes.txt
h04
h11
h13
h30
h61
h40
h41
h39
h42
$ file culls.txt hashes.txt culls2.txt
culls.txt: ASCII text
hashes.txt: ASCII text
culls2.txt: ASCII text, with CRLF line terminators
我得到的输出culls.txt
符合预期(h30
并h40
从输出中删除):
$ grep -v -F -f culls.txt hashes.txt
h04
h11
h13
h61
h41
h39
h42
我得到的输出culls2.txt
与您看到的类似(仅从h40
输出中删除;h30
仍然存在):
$ grep -v -F -f culls2.txt hashes.txt
h04
h11
h13
h30
h61
h41
h39
h42
的最后一行没有行结尾culls2.txt
。
当我还在最后一行添加 CRLF 行终止符时,我得到:
$ grep -v -F -f culls3.txt hashes.txt
h04
h11
h13
h30
h61
h40
h41
h39
h42
现在,输出中不再删除任何哈希值。
这证明 CRLF 行终止符是问题所在。