Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.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
Linux 具有多个参数的Gnu并行-选择性命令执行_Linux_File_Parallel Processing_Gnu - Fatal编程技术网

Linux 具有多个参数的Gnu并行-选择性命令执行

Linux 具有多个参数的Gnu并行-选择性命令执行,linux,file,parallel-processing,gnu,Linux,File,Parallel Processing,Gnu,我有一个程序,它有3个参数-t,-a和-s-例如 ./Run -t 1500 -a 150000 -s filename 该程序将数据作为一行(7列)附加到文件“filename”的末尾 我想研究这两个参数如何影响范围t in(1500150000[步数5000])和a in(500600000[步数500])的输出。到目前为止,我正在做的是 parallel -j+0 ./Run -t {2} -a {1} :::: <(seq 500 500 600000) :::: <seq

我有一个程序,它有3个参数-t,-a和-s-例如

./Run -t 1500 -a 150000 -s filename

该程序将数据作为一行(7列)附加到文件“filename”的末尾

我想研究这两个参数如何影响范围t in(1500150000[步数5000])和a in(500600000[步数500])的输出。到目前为止,我正在做的是

parallel -j+0 ./Run -t {2} -a {1} :::: <(seq 500 500 600000) :::: <seq(1500 5000 15000)
每次更新参数a时


如何使用gnu parallel实现这一点?

我发现并行附加到同一个文件很可怕:在某些情况下这样做是安全的,但在很多情况下这样做是不安全的:

# Generate files with a single very long line
parallel -j0 perl -e '\$a=\"1{}\"x10000000\;print\ \$a,\"\\n\"' '>' {} ::: {a..z}
rm -f out.par 
# Grep for the single line in parallel - append to same file
parallel -j0 'grep 1 >> out.par' ::: {a..z}
# This ought to only give a single line for each letter
# But because of race condition some lines are split into two
parallel --tag 'grep {} out.par | wc -l' ::: {a..z}
rm out.par
# Do the same in serial (no race condition)
parallel -j1 'grep 1 >> out.par' ::: {a..z}
# Only a single line per letter
parallel --tag 'grep {} out.par | wc -l' ::: {a..z}
# Do the same in parallel but with serialized output (no race condition)
parallel -j0 grep 1 ::: {a..z} > out.par
# Only a single line per letter
parallel --tag 'grep {} out.par | wc -l' ::: {a..z}
因此,如果我是您,我会首先将
/Run
更改为输出为标准输出,这样您就可以:

./Run -t 1500 -2 500 > filename
# And in parallel:
parallel ./Run -t {2} -2 {1} :::: <(seq 500 500 600000) :::: <(seq 1500 5000 15000) > filename
现在我们只需要做一些仅在第一个参数为11500时运行的东西:

parallel -k './Run -t {2} -2 {1}; if [ {2} -eq 11500 ]; then echo "";fi' :::: <(seq 500 500 600000) :::: <(seq 1500 5000 15000) > filename

parallel-k'./Run-t{2}-2{1};如果[{2}-等式11500];然后是“回声”;fi':“此程序将数据作为一行(共7列)附加到文件“filename”的末尾。如果两个程序同时附加,会发生什么情况?”?
parallel -k ./Run -t {2} -2 {1} :::: <(seq 500 500 600000) :::: <(seq 1500 5000 15000) > filename
parallel -k './Run -t {2} -2 {1}; if [ {2} -eq 11500 ]; then echo "";fi' :::: <(seq 500 500 600000) :::: <(seq 1500 5000 15000) > filename