【发布时间】:2016-01-06 00:53:30
【问题描述】:
我试图 grep 1M 行 '|'将具有 320K 模式的文件从另一个文件中分离出来,并通过管道连接到 Ole Tange 的并行包,并将匹配的结果通过管道传输到另一个文件中。我在具有 24 核和 16GB 物理内存的 Windows 7 上使用 Cygwin。
通过此链接后我使用的命令 Grepping a huge file (80GB) any way to speed it up?
< matchReport1.dat parallel --pipe --block 2M LC_ALL=C grep --file=nov15.DAT > test.match
其中 matchReport1.dat 是 1M 行 '|'分离文件和 320K 模式存储在 nov15.DAT 中。任务管理器活动达到所有 24 个核心,物理内存使用量跃升至 ~15GB,我开始收到 grep 内存已用尽的消息。
然后我尝试将 nov15.DAT 模式文件拆分为 10 个较小的块并运行 grep
parallel --bar -j0 -a xaa "LC_ALL=C grep {} matchReport1.dat" > testxaa
但这需要的时间太长(30K 行中只有 1.6K 行 grepping 花了大约 15 分钟)。
我的 nov15.DAT 模式文件包含像“A12345M”这样的字符串,并且该模式需要匹配的文件,即 matchReport1.dat 有像“A12345M_dfdf”和“A12345M_02”这样的字符串,因此不能在 grep 中使用 -F 选项。除了使用数据库之外,有人可以建议修复或任何其他选项吗?
这是一个示例
nov15.DAT -> http://pastebin.com/raw/cUeGcYLb
matchReport1.dat -> http://pastebin.com/raw/01KSGN6k
【问题讨论】:
-
在您的问题中添加一些 matchReport1.dat 行和一些 nov15.DAT 行。
标签: bash grep cygwin gnu-parallel