2015-11-06 27 views
1

我有两个带有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行足以进行测试?

+0

有关使用'diff'什么?还可以看看[根据第二个文本文件从文本文件中删除重复项](http://stackoverflow.com/q/30820894/1983854),并进行了一系列比较。 – fedorqui

回答

2

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

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

是的,在0.124秒后,我确信10000不足以进行测试。 –

+0

因此可能'join <(sort first.txt)<(sort second.txt)'也可以工作。 – fedorqui

相关问题