XARGS, GREP and GNU parallel

4

作为一名 Linux 新手,我在解决文本搜索的基本问题方面遇到了困难。

我的目标如下: 我有一个包含特定路径的绝对路径列表文件。

  1. 我想遍历这个文件列表并使用 grep 命令查找特定模式。
  2. 如果在该文件中找到该模式,则将其重定向到另一个输出文件。
  3. 由于这些文件分散在 NFS 上,我希望利用 GNU parallel 来加速查找。

所以,我做的事情如下:

cat filepaths|xargs -iSomePath echo grep -Pl '\d+,\d+,\d+,\d+' \"SomePath\"> FoundPatternsInFile.out| parallel -v -j 30

当我运行这个命令时,我一直收到以下错误提示:
grep: "/path/to/file/name": No such file or directory

文件和路径已经存在。有人可以指出我在使用xargs和grep时可能出错的地方吗?
谢谢。

我想我意识到了这里可能发生的事情,我将SomePath变量用引号括起来。Grep无法找到引号内的路径。删除引号并运行命令cat filepaths|xargs -iSomePath echo grep -Pl '\d+,\d+,\d+,\d+' SomePath> FoundPatternsInFile.out| parallel -v -j 30似乎解决了这个问题。 - sc_ray
2
FYI -- xargs <filepathscat filepaths | xargs 更高效一些。 - Charles Duffy
1个回答

3
cat filepaths | parallel -j 30 grep -Pl '\d+,\d+,\d+,\d+' {} > FoundPatternsInFile.out

在这种情况下,你甚至可以省略{}。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接