我正在尝试并行使用perl脚本。 perl脚本的输入和输出参数从目录中获取文件名。这与gnu parallel很简单。
ls dir | parallel script.pl --input {} --output {.}.out
但是,脚本中的另一个参数要求我从每个文件中获取第一行和最后一行,第二列的值...类似
ls dir | parallel script.pl --input {} --output {.}.out --otherargs range:{1}-{2}
其中{1}和{2}来自先前/同时使用awk或sed以获取这些值,例如
awk 'NR==1 {print $2}; END {print $2}'
但是我在哪里放(如何放)这个awk就像“工作流程”中的步骤一样,允许perl脚本使用它?
看着
Change text in argument for xargs (or GNU Parallel)
正确的方法是这样做吗?
ls | parallel script.pl --input {} --output {.}.out --otherargs range:{1}-{2} :::: <(awk 'NR==1 {print $2}) <(awk 'END {print $2})
谢谢。
答案 0 :(得分:1)
这可能是您需要的解决方案:
#!/bin/bash
readarray -t LIST < <(ls)
FIRST=${LIST[0]}; LAST=${LIST[@]:(-1)}
printf '%s\n' "${LIST[@]}" | parallel script.pl --input {} --output {.}.out --otherargs "range:${FIRST}-${LAST}"
将其作为bash script.sh
运行。也许你需要运行排序? <(ls | sort)
。即使您有$FIRST
和$LAST
的其他来源,我认为这个概念也会遵循。
使用临时文件的类似概念:
ls > temp
FIRST=$(awk 'NR==1 {print $2}' temp)
LAST=$(awk 'END {print $2}' temp}
parallel script.pl --input {} --output {.}.out --otherargs "range:${FIRST}-${LAST}" < temp
此外,我认为这是你用Awk命令真正需要的东西:
{read -r FIRST; read -r LAST;} < <(awk 'NR==1{print $2;next}{t=$2};END{print t}' temp)
答案 1 :(得分:1)
你想要的并不是很清楚。如果不是这样,那么请给我们一个完整的输入和所需输出的例子。
ls | parallel script.pl --input {3} --output {3.}.out --otherargs range:{1}-{2} :::: <(ls | awk 'NR==1 {print $2}') <(ls | awk 'END {print $2}') -
或:
parallel script.pl --input {3} --output {3.}.out --otherargs range:{1}-{2} :::: <(ls | awk 'NR==1 {print $2}') <(ls | awk 'END {print $2}') <(ls)
完成教程http://www.gnu.org/software/parallel/parallel_tutorial.html您的命令行会爱你。
答案 2 :(得分:0)
我自己的解决方案是一个bash脚本,传递给GNU paralle,但是上面的Ole更优雅(GNU并行一线)..... bash脚本收集相关变量并将它们传递给perl脚本。在GNU parallel中运行此脚本。
这是bash脚本
#!/bin/bash
sample=$1
describer=$(echo ${sample} | sed 's/.sync//') # removes .sync suffix
a=($(awk 'NR==1 {print $2}' ${sample}))
b=($(awk 'END {print $2}' ${sample}))
perl script.pl --input ${describer}.sync --output ${describer}.genepop
--argument scaffold_1:$a-$b
其次是
ls | parallel bash bash.script.sh
这使得从文件部分和文件分析包中收集变量。
感谢konsolebox的激励洞察力。我也应该关注自己的老帖子。
Storing text and numeric variable from file to use in perl script