linux – GNU并行组合,多次使用参数列表

linux – GNU并行组合,多次使用参数列表,第1张

概述我想使用以下来生成唯一的作业,其中{1}和{2}是唯一的元组: parallel echo {1} {2} ::: A B C D ::: A B C D 例如在python(itertools)中提供了这样一个组合生成器: permutations('ABCD', 2) AB AC AD BA BC BD CA CB CD DA DB DC 有没有办法直接通过bash实现它?还是GNU并行本身? 我想使用以下来生成唯一的作业,其中{1}和{2}是唯一的元组:

parallel echo {1} {2} ::: A B C D ::: A B C D

例如在python(itertools)中提供了这样一个组合生成器:

permutations('ABCD',2)

AB AC AD BA BC BD CA CB CD DA DB DC

有没有办法直接通过bash实现它?还是GNU并行本身?
也许以某种方式跳过冗余工作?但是,如何检查已使用的参数组合.

parallel echo {= 'if($_==3) { skip() }' =} ::: {1..5}
解决方法 如果值是唯一的:

parallel echo {= 'if($arg[1] eq $arg[2]) { skip() }' =} ::: A B C D ::: A B C D

或者更一般地说:

parallel echo \  '{= my %seen; for my $a (@arg) { $seen{$a}++ and skip() } =}' \  ::: A B C D ::: A B C D ::: A B C D

如果你想将AB视为BA,那么这只会运行其中一种组合:

parallel echo \  '{= for my $t (2..$#arg) { if($arg[$t-1] ge $arg[$t]) { skip() } } =}' \  ::: A B C D ::: A B C D ::: A B C D

如果你使用这些很多,记住你可以使用–rpl来制作你自己的替换字符串,方法是将它放在〜/ .parallel / config中

--rpl '{unique} my %seen; for my $a (@arg) { $seen{$a}++ and skip() }'--rpl '{choose_k} for my $t (2..$#arg) { if($arg[$t-1] ge $arg[$t]) { skip() } }'

然后运行:

parallel echo {unique} ::: A B C D ::: A B C D ::: A B C Dparallel echo {choose_k} ::: A B C D ::: A B C D ::: A B C D
总结

以上是内存溢出为你收集整理的linux – GNU并行组合,多次使用参数列表全部内容,希望文章能够帮你解决linux – GNU并行组合,多次使用参数列表所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/yw/1029704.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存