我有两个带有SHA1和的文件,我试图在它们中找到匹配的行。我尝试使用grep:在bash中的两个文件中找到匹配的最快方法
grep -f first.txt second.txt
但这很慢。它让我想到使用脚本或任何常用shell工具在Bash中找到匹配行的最快方法是什么?
下面是一个脚本,用于在将行写入文件的同时生成两个文件,这两个文件包含值为1 ... 10000的10000行SHA1总和并对它们进行洗牌(使用shuf
)。所以这两个文件中的行将是相同的,但顺序不同。我用共享的外壳计算机花了40秒来制作这两个文件。
for files in first.txt second.txt
do
for i in {1..10000}
do dashed=$(echo $i | sha1sum)
read undashed rest <<< $dashed
echo $undashed
done |shuf > $files
done
time grep -f first.txt second.txt
花了大约一分钟找到12匹配的行,所以这是大约每秒五行。在grepping之前对文件进行排序并没有提高速度。某处有人建议使用grep --mmap
但给我的反馈如下:
grep的:自2010年以来
所以--mmap选项一直无操作,谁是因某种测试?
随意修复脚本,如果你想和添加标签,因为你想出了想法。 10000行足以进行测试?
有关使用'diff'什么?还可以看看[根据第二个文本文件从文本文件中删除重复项](http://stackoverflow.com/q/30820894/1983854),并进行了一系列比较。 – fedorqui