小编fif*_*ine的帖子

有没有办法让这个单线更快?

语境

我有一个包含数千个 zip 文件的目录,这些文件在表单中注明日期YYYYMMDD_hhmmss.zip,每个大约 300K。在每个 zip 文件中大约有 400 个 xml 文件,每个大约 3K。

问题

我需要能够在 zip 文件的日期范围内搜索和找到给定的字符串。

当前(尽管平庸)的解决方案

我有以下单线

find /home/mydir/ -type f | sort | \
awk "/xml_20140207_000016.zip/,/xml_20140207_235938.zip/" | \
xargs -n 1 -P 10 zipgrep "my search string"
Run Code Online (Sandbox Code Playgroud)

它的重点是

  1. 列出我的千文件目录中的所有文件
  2. 对这个文件列表进行排序
  3. 根据给定日期检索一系列文件(此awk命令仅打印第一个匹配字符串之后到第二个匹配字符串的行)
  4. 将对应于单个文件的结果的每一行传递给 zipgrep

问题

即使在 24 核机器上有 10 个进程,这种单行运行速度也非常慢。我相信它因为zipgrep命令而变慢,但我不够聪明,不知道如何改进它。我不知道该不该,但我有点尴尬,我的同事写了一个运行速度比这个脚本更快的java工具。如果可能的话,我想扭转这种局面。那么,有没有人知道如何在这种情况下更快地执行此命令?或者完全改进它的任何部分?

grep bash xargs awk shell-script

7
推荐指数
2
解决办法
880
查看次数

标签 统计

awk ×1

bash ×1

grep ×1

shell-script ×1

xargs ×1