Unix 使用GNU parallel的所有文件中字符串出现的次数
我试图从目录中的所有文件中获取特定字符串的计数 所以我在“{}”之前使用find-name“application.log*”| parallel zgrep-c”指令 我的期望是,它将在所有application.log文件上计算字符串“directions before” 但是它实际上给出了类似这样的输出Unix 使用GNU parallel的所有文件中字符串出现的次数,unix,gnu-parallel,Unix,Gnu Parallel,我试图从目录中的所有文件中获取特定字符串的计数 所以我在“{}”之前使用find-name“application.log*”| parallel zgrep-c”指令 我的期望是,它将在所有application.log文件上计算字符串“directions before” 但是它实际上给出了类似这样的输出 find -name "application.log*" | parallel zgrep -c "Instructions before" {} ./application.log.2
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指令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
如果,如OP所述,文件都在一个目录中,则可以使用parallel-q zgrep-c“之前的说明”使命令更简单、更可靠::application.log*