嵌套for循环太慢:1MN记录遍历

时间:2015-12-23 20:53:03

标签: unix

我的文件数量很大,文件大约有200,000条记录。我一直在测试一些情况,我必须弄清楚文件的命名模式与某些特定的字符串匹配。这是我之前的方式 -

测试字符串,我存储在一个文件中(假设一个案例,它们是10)。包含字符串记录的实际文件,以换行符分隔;总计高达200,000条记录。为了检查大文件中是否存在测试字符串模式,我编写了一个小的嵌套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上搜索一些东西。

由于

2 个答案:

答案 0 :(得分:3)

尝试以下方法:

grep -f TestString.txt LargeFile.txt >> result.txt

答案 1 :(得分:1)

查看grep

while read line
do
  cat LargeFile.txt | grep "$line" >> result.txt
done < TestString.txt

grep将输出任何匹配的字符串。这可能会更快。请注意,您的TestString.txt文件不应有任何空行,或者grep将返回LargeFile.txt中的所有内容。