Ok, now suppose that my_program takes two arguments and I want to use parallel 
to run the program in pairs. For example, if


x=(0.1 0.2 0.3)
y=(0.4 0.5 0.6)


then I want to get:

my_program ${x[0]} ${y[0]}
my_program ${x[1]} ${y[1]}
my_program ${x[2]} ${y[2]}

Now if I use  "parallel my_program ::: ${x[@]} ::: ${y[@]}"
it will run a nested loop, ie arguments will be (0.1, 0.4), (0.1, 0.5), (0.1, 
0.6) etc, which is not what I want.

I know I can achieve running in pairs by using a table and --colsep but I was 
wondering whether I could avoid the use of tables. 
I also know that I could use something like

z=(0.1 0.4 0.2 0.5 0.3 0.6)

and run "parallel -N2 my_program {1} {2} :::: ${z[@]}",

but this is not ideal since I need to create everytime the additional vector z 
(unless I am unaware of a bash function that combines vectors in that way.)


Ideally, I would like to use something like in my original post


parallel my_program ${x[{1}]} ${y[{1}]} :::: <(seq 0 2)

which of course does not work.

Thanks for any suggestions!




________________________________
 From: giorgos sermaidis <[email protected]>
To: Ole Tange <[email protected]> 
Cc: "[email protected]" <[email protected]> 
Sent: Tuesday, 10 January 2012, 16:17
Subject: Re: bash arrays in parallel
 

Thanks to everyone. All your suggestions work perfectly!



________________________________
 From: Ole Tange <[email protected]>
To: 
Cc: "[email protected]" <[email protected]> 
Sent: Tuesday, 10 January 2012, 15:06
Subject: Re: bash arrays in parallel
 
On Mon, Jan 9, 2012 at 4:11 PM, Cook, Malcolm <[email protected]> wrote:

> parallel my_program ::: ${x[@]}

That works if x does not contain spaces. If you have special chars in
the variable and you want each element to be interpreted separately
(i.e. do not split on space) try:

  x=("My brother's 12\" records are worth <\$\$\$>"'!' 0.2 0.3)
  parallel echo ::: "${x[@]}"

/Ole

Reply via email to