【问题标题】:Combining replacement strings and regular expressions in GNU Parallel在 GNU Parallel 中组合替换字符串和正则表达式
【发布时间】:2020-02-17 05:50:26
【问题描述】:

我有一个格式的文件路径列表:

/data/nicotine_sensi/bam/9-2_box_1_S23_starAligned.sortedByCoord.out.bam
/data/nicotine_sensi/bam/9-2_box_3_S101_starAligned.sortedByCoord.out.bam
/data/nicotine_sensi/bam/9-3_box_1_S24_starAligned.sortedByCoord.out.bam
/data/nicotine_sensi/bam/9-3_box_3_S102_starAligned.sortedByCoord.out.bam

我想输入一个 gnu 并行命令,以便预定义的替换字符串和 perl 或 --plus 替换字符串同时运行,但我在 tutorials 中找不到解决方案。理想情况下,{/...}{%_starAligned} 将一起工作以产生:

9-2_box_1_S23
9-2_box_3_S101
9-3_box_1_S24
9-3_box_3_S102

但是,我得到的最接近的是:

parallel --rpl '{..} s:/data/nicotine_sensi/bam/::;s:_starAligned.sortedByCoord.out.bam::' \
  echo {..} ::: $(ls $bam_dir/*.bam)

这对于其他目录来说很混乱并且不是很便携。

【问题讨论】:

    标签: gnu-parallel


    【解决方案1】:

    {/...}的定义是:

    s:.*/::; s:\.[^/.]+$::; s:\.[^/.]+$::; s:\.[^/.]+$::;
    

    {%(.*)}的定义是:

    s/$$1$//;
    

    如此结合,你可以做到:

    echo /data/nicotine_sensi/bam/9-3_box_1_S24_starAligned.sortedByCoord.out.bam |
      parallel --rpl '{¤([^}]+?)} s:.*/::; s:\.[^/.]+$::; s:\.[^/.]+$::; s:\.[^/.]+$::; s/$$1$//;' echo {¤_starAligned}
    

    如果你知道你将永远删除_something 那么:

    echo /data/nicotine_sensi/bam/9-3_box_1_S24_starAligned.sortedByCoord.out.bam |
      parallel --rpl '{¤} s:.*/::; s:\.[^/.]+$::; s:\.[^/.]+$::; s:\.[^/.]+$::; s/_[^_]+$//;' echo {¤}
    

    如果您会经常使用它,那么将它放在个人资料中可能是个好主意。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-26
      • 2019-04-17
      • 2018-07-13
      • 2012-11-07
      • 2017-02-04
      • 1970-01-01
      相关资源
      最近更新 更多