linux - 从 10000 个文件中并行搜索特定字符串模式

标签 linux bash grep solaris sunos

问题陈述:-

我需要搜索特定的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/

相关文章:

c++ - (linux)Socket 返回 0

mysql - 使用 bash 将图像 blob 从 mysql 下载到本地计算机?

linux - 使用 "sed"显示 test.txt 的前 2 行和后 3 行

C 使用多个本地 ip 之一进行 DNS 查询

linux - 使用 bash 添加一个常数来移动文件名

linux - 当 grep "\\"XXFile 我得到 "Trailing Backslash"

linux - grep 精确匹配

linux - 打印文件中的最后一个字段并将其用作另一个文件的名称

c - 使用 iconv() 的 UTF-8 到 C/POSIX 语言环境转换失败

linux - 如何在 unix 中将第一列移动到最后一列?