xargs字符串用作agrep的输入

时间:2012-06-21 01:21:23

标签: grep xargs zcat agrep

伙计我正在使用xargs传递agrep的输入。我正在使用xargs,如下所示

Script:    
xargs -L 1 -I string echo "RequestId="string | xargs -L 1 -I string zcat FILEB | agrep -dEOE string


Output till "RequestId="string
RequestID=543214324
RequestID=512121221
RequestID=521212121

我的目标是在另一个文件“文件B”中修改此请求ID。由于这个文件是压缩的,我需要在做agrep之前使用zcat ......但是如果我这样做我得到的结果不正确..我在agrep中使用的最后一个“字符串”是不正确的..任何关于这个的建议都会很高有帮助的。

1 个答案:

答案 0 :(得分:0)

你想要的并不完全清楚。我假设您有一个文件FILEA包含:

543214324
512121221
521212121

并且您想要为FILEB.gz提供:

RequestID=543214324
RequestID=512121221
RequestID=521212121

FILEBB.gz是gzip压缩的,因此您需要zcat对其进行解压缩,并且您不能使用zgrep,因为您依赖于仅agrep中的功能。

使用GNU Parallel,您可以:

cat FILEA | parallel zcat FILEB.gz \| agrep -dEOE RequestID={}

并行执行此操作的一个优点是,如果FILEB.gz太大而无法放入内存,那么这将确保并行搜索,从而避免每次搜索从磁盘读取FILEB.gz。另一个优点是您可以使用多个CPU核心,而这些核心几乎可以保证您的计算机具备这些功能。

您可以通过以下方式安装GNU Parallel:

wget http://git.savannah.gnu.org/cgit/parallel.git/plain/src/parallel
chmod 755 parallel
cp parallel sem

观看GNU Parallel的简介视频,了解详情:https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1