在bash中以两个文件查找匹配的最快方法

时间:2015-11-06 11:01:14

标签: bash grep

我有两个带有SHA1总和的文件,我正在尝试在其中找到匹配的行。我尝试使用grep:

grep -f first.txt second.txt

但这很慢。它让我想到使用脚本或任何常用的shell工具在Bash中找到匹配行的最快方法是什么?

下面是一个脚本,它生成两个文件,其中10000行SHA1总和来自值1 ... 10000,并在将行写入文件时将它们(使用shuf)进行混洗。因此,两个文件中的行将是相同的,但顺序不同。我的共享shell计算机需要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行是否足以进行测试?

1 个答案:

答案 0 :(得分:2)

首先对文件进行排序,然后使用join

sort first.txt > firstSorted.txt
sort second.txt > secondSorted.txt
join firstSorted.txt secondSorted.txt