Perl command inside GNU parallel?

﹥>﹥吖頭↗ 提交于 2019-12-08 02:15:40

问题


I am trying to run this in parallel:

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

That is, I want to execute the perl command on all files in the current directory, in parallel. This is not working, but I have no idea why.

Comment: The perl command is fixing floating-point numbers in tables. See Replacing precision of floating point numbers in existing file.


回答1:


In Bash you can make a function:

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

Exporting functions in Zsh requires using a variable:

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

Alternatively you can quote the perl expression and the redirection (which will also work in Bash):

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


来源:https://stackoverflow.com/questions/36032601/perl-command-inside-gnu-parallel

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!