如何让GNU Parallel按索引匹配多输入参数数组而非生成全组合
如何让GNU Parallel按索引匹配多输入参数数组而非生成全组合
嗨,这个问题我之前也碰到过!GNU Parallel默认确实会生成所有输入参数的笛卡尔积,也就是你现在得到的全组合结果,但要实现按索引一一配对的需求,其实用一个简单的选项就能搞定——--xapply。
修改后的脚本示例
把你原来的Parallel调用命令加上--xapply参数就行:
#!/bin/bash letters='a b' numbers='1 2' f1(){ echo $1 $2 echo letter: $1 echo number: $2 } export -f f1 # 关键就是加上--xapply选项 parallel --xapply f1 {1} {2} ::: $letters ::: $numbers
运行结果
执行这个修改后的脚本,就会得到你想要的按索引配对的输出:
a 1 letter: a number: 1 b 2 letter: b number: 2
额外说明
--xapply的核心逻辑是:将每个输入源的第N个元素对应配对,直到最短的那个输入源的元素用完。比如如果你的letters是a b c而numbers还是1 2,那只会生成a 1和b 2两组结果,第三个元素c因为没有对应的数字会被自动忽略。
备注:内容来源于stack exchange,提问作者tlhenvironment
相关产品推荐
相关产品推荐

