我试图并行运行:
parallel perl -pe '!/^step/ && s/(\S+)/sprintf("%.2e", $1)/ge' {} > {}.fix ::: *
也就是说,我想并行执行当前目录中所有文件的perl命令。这不起作用,但我不明白为什么。
注释:perl命令正在修复表中的浮点数。请参阅Replacing precision of floating point numbers in existing file。
答案 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 ::: *