GNU并行多组命令

问题描述:

我想使用GNU并行使用两个不同的参数和两个不同的球体运行相同的命令。例如,我想下面的作业运行:GNU并行多组命令

mycmd A apples1 
mycmd A apples2 
mycmd A apples3 
mycmd B bananas1 
mycmd B bananas2 

我可以用两个单独的呼叫做到这一点,但是这违背了我的工作由一个呼叫管理,以parallel的目的。有没有办法?

parallel mycmd A ::: apples* 
parallel mycmd B ::: bananas* 

我假设你不想让你的苹果与Bs。否则,它是那样简单:

parallel mycmd ::: [A-Z] ::: [a-z]* 

如果A可以计算为第二arg的第一个字符,你可以从20140722版本做到这一点:

parallel mycmd '{= $_=uc(substr($_,0,1)) =}' {} ::: [a-z]* 

如果你有苹果的列表和相应的像这样:

A,apples1 
A,apples2 
B,bananas1 
B,bananas2 
B,bananas3 

那么可以拆分上:

cat file | parallel --colsep , mycmd {1} {2} 

如果这也不是你如何得到你的输入,那么你需要更多地解释你是如何拥有你的苹果和苹果的。

+0

正确,我不想'B's与苹果。 “A”不能从其他论点计算;我现在正在做的是手动构建列表作为文件,就像你在最后一个例子中做的那样。 – ash 2014-11-24 19:14:39