加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

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

发布时间:2020-12-14 01:44:52 所属栏目:Linux 来源:网络整理
导读:我想使用以下来生成唯一的作业,其中{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实现
我想使用以下来生成唯一的作业,其中{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 D
parallel echo {choose_k} ::: A B C D ::: A B C D ::: A B C D

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读