问题陈述:-
我需要搜索特定的String Pattern
大约10000 files
并在包含 particular pattern
的文件中查找记录。我可以使用grep
在这里,但这需要很多时间。
下面是我用来搜索 particular string pattern
的命令之后unzipping
dat.gz file
gzcat /data/newfolder/real-time-newdata/*_20120809_0_*.gz | grep 'b295ed051380a47a2f65fb75ff0d7aa7^]3^]-1'
如果我简单的数一下上面解压后有多少个文件dat.gz file
gzcat /data/newfolder/real-time-newdata/*_20120809_0_*.gz | wc -l
我四处走动10000 files
。我需要在所有这些 10000 files
中搜索上面的字符串模式并找出包含上述String Pattern
的记录。我的上面的命令运行良好,但速度非常慢。
对此最好的方法是什么?我们应该采取 100 files
一次并在 100 files parallelly
中搜索特定的字符串模式.
注意:
我正在运行SunOS
bash-3.00$ uname -a
SunOS lvsaishdc3in0001 5.10 Generic_142901-02 i86pc i386 i86pc
最佳答案
不要不要并行运行!!!这会使磁头到处弹跳,速度会慢很多。
由于您正在读取存档文件,因此有一种方法可以显着提高性能 - 不要写出解压结果。理想的答案是解压缩到内存中的流,如果这不可行,则解压缩到 ramdisk。
无论如何,您确实需要一些并行性——一个线程应该获取数据,然后将其传递给另一个执行搜索的线程。这样,您要么在磁盘上等待,要么在核心上等待进行解压缩,您不会浪费任何时间进行搜索。
(请注意,如果使用 ramdisk,您将需要主动读取它写入的文件,然后终止它们,这样 ramdisk 就不会填满。)
关于linux - 从 10000 个文件中并行搜索特定字符串模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11978754/