我有两个带有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行是否足以进行测试?
答案 0 :(得分:2)
首先对文件进行排序,然后使用join
:
sort first.txt > firstSorted.txt
sort second.txt > secondSorted.txt
join firstSorted.txt secondSorted.txt