![为什么 1250 个字符串与 90k 个模式的匹配速度如此之慢?](https://linux22.com/image/114257/%E4%B8%BA%E4%BB%80%E4%B9%88%201250%20%E4%B8%AA%E5%AD%97%E7%AC%A6%E4%B8%B2%E4%B8%8E%2090k%20%E4%B8%AA%E6%A8%A1%E5%BC%8F%E7%9A%84%E5%8C%B9%E9%85%8D%E9%80%9F%E5%BA%A6%E5%A6%82%E6%AD%A4%E4%B9%8B%E6%85%A2%EF%BC%9F.png)
我的字符串是文件路径,例如s/14/11/13/15/n7ce49B_235_25ed2d70.jpg
;我的模式很简单,都像n7ce49B_.+
.
我GNU grep 2.6.3
在下面奔跑Debian 6.0.10在戴尔DL360G7服务器(我提到它只是为了让大家了解一下这台机器的性能)具有 15k HDD,并且此命令:time LC_ALL=C grep -E -f path_to_patterns_file path_to_strings_file
无法完成 - 服务器交换太糟糕了。 20k 个图案需要 3 个多小时。
这对我来说似乎不合理。
还可以通过以下方式测试和调整输入线和模式的数量:
xxd -p /dev/urandom | fold -sw 100 | head -n 1250 |
grep -Ef <(xxd -p /dev/urandom | fold -sw 10 | head -n 20000)