Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix 使用GNU parallel的所有文件中字符串出现的次数_Unix_Gnu Parallel - Fatal编程技术网

Unix 使用GNU parallel的所有文件中字符串出现的次数

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”指令

我的期望是,它将在所有application.log文件上计算字符串“directions 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指令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*