使用 GNU parallel 的所有文件中字符串出现的次数
Number of occurences of a String in all files using GNU parallel
我正在尝试从目录中的所有文件中获取特定字符串的计数
所以我使用了 find -name "application.log*" |并行 zgrep -c "Instructions before" {}
我的预期是它会计算所有 application.log 个文件中的字符串 "Instructions before"
但它实际上给出了这样的输出
find -name "application.log*" | parallel zgrep -c "Instructions before" {}
./application.log.2020-05-22-08-24.gz:0
gzip: before.gz: No such file or directory
before:0
./application.log.2020-05-22-08-22.gz:0
gzip: before.gz: No such file or directory
before:0
./application.log.2020-05-22-08-29.gz:0
gzip: before.gz: No such file or directory
这是一个引用问题。引号被 shell 吃掉,所以每个 zgrep
进程被调用为 zgrep -c Instructions before ./application.log.blah.gz
,Instructions
作为要搜索的字符串,before
其中之一要搜索的文件 - zgrep
如果缺少 .gz
显然会添加扩展名。
所以你需要引用引号:
find -name "application.log*" -print0 | parallel -0 zgrep -c '"Instructions before"' {}
或告诉parallel
为您做:
find -name "application.log*" -print0 | parallel -0q zgrep -c "Instructions before" {}
如果您关心的所有文件都在同一个目录中而不是在子目录中,请参阅 Mark 的评论以获得避免 find
.
的更简单方法
我正在尝试从目录中的所有文件中获取特定字符串的计数
所以我使用了 find -name "application.log*" |并行 zgrep -c "Instructions before" {}
我的预期是它会计算所有 application.log 个文件中的字符串 "Instructions before"
但它实际上给出了这样的输出
find -name "application.log*" | parallel zgrep -c "Instructions before" {}
./application.log.2020-05-22-08-24.gz:0
gzip: before.gz: No such file or directory
before:0
./application.log.2020-05-22-08-22.gz:0
gzip: before.gz: No such file or directory
before:0
./application.log.2020-05-22-08-29.gz:0
gzip: before.gz: No such file or directory
这是一个引用问题。引号被 shell 吃掉,所以每个 zgrep
进程被调用为 zgrep -c Instructions before ./application.log.blah.gz
,Instructions
作为要搜索的字符串,before
其中之一要搜索的文件 - zgrep
如果缺少 .gz
显然会添加扩展名。
所以你需要引用引号:
find -name "application.log*" -print0 | parallel -0 zgrep -c '"Instructions before"' {}
或告诉parallel
为您做:
find -name "application.log*" -print0 | parallel -0q zgrep -c "Instructions before" {}
如果您关心的所有文件都在同一个目录中而不是在子目录中,请参阅 Mark 的评论以获得避免 find
.