我有巨大的文件数量,大约200,000记录在一个文件中。我一直在测试一些情况,在这些情况下,我必须弄清楚文件的命名模式是否与某些特定的字符串匹配。这里是我如何前面 -嵌套for循环太慢:1MN记录遍历
测试字符串,我存储在一个文件(假设一个案件,他们是10)。包含字符串记录的实际文件,以换行符分隔;总计高达20万条记录。要检查大文件中是否存在测试字符串模式,我写了一个小的嵌套for循环。
for i in `cat TestString.txt`
do
for j in `cat LargeFile.txt`
do
if [[ $i == $j ]]
then
echo "Match" >> result.txt
fi
done
done
此嵌套循环的实际需要做的遍历(如果我没看错的概念),10x200000倍。通常情况下,我没有看到服务器上的负载太大,但所花费的时间就像从前一样。节录在过去4小时内运行,并且有一些“匹配”结果。
有没有人有任何想法来加速?我用python或perl touch找到了很多答案,但我老实说在Unix上搜索某些东西。
感谢
您当前的代码读取每个循环一个字。当TestString.txt中的10个记录每个都有20个字时,您将循环执行LargeFile.txt 10x20x200.000次。你多久检查一次?当LargeFile.txt对每条记录也有20个字时,您可以进行10x20x200.000x20的比较。 –
您应该将'>> result.txt'移到循环外部,这样您将不会关闭并打开每个循环的文件。 –