GNU并行内部的Perl命令?

时间:2016-03-16 10:13:30

标签: perl zsh gnu-parallel

我试图并行运行:

parallel perl -pe '!/^step/ && s/(\S+)/sprintf("%.2e", $1)/ge' {} > {}.fix ::: *

也就是说,我想并行执行当前目录中所有文件的perl命令。这不起作用,但我不明白为什么。

注释:perl命令正在修复表中的浮点数。请参阅Replacing precision of floating point numbers in existing file

1 个答案:

答案 0 :(得分:2)

在Bash中你可以创建一个函数:

doit() {
  perl -pe '!/^step/ && s/(\S+)/sprintf("%.2e", $1)/ge' "$1" > "$2"
}
export -f doit
parallel doit {} {}.fix ::: *

在Zsh中导出函数需要使用变量:

doit() {
  perl -pe '!/^step/ && s/(\S+)/sprintf("%.2e", $1)/ge' "$1" > "$2"
}
PARALLEL_ENV="$(typeset -f doit)"
parallel doit {} {}.fix ::: *

或者你可以引用perl表达式和重定向(也可以在Bash中使用):

parallel perl -pe \''!/^step/ && s/(\S+)/sprintf("%.2e", $1)/ge'\' {} '>' {}.fix ::: *