带有文件输入参数的 gnu 并行对参数

带有文件输入参数的 gnu 并行对参数

我有一个包含很多行的文件,并且在每一行上都有我想要与制表符分隔符并行传递的参数。

我运行这个脚本

cat $hdd_file | grep $ssd | parallel -C '\t' clean_and_destroy

它可以工作,$hdd_file 是文件名,grep 收集 hdds 有某个 $ssd 作为缓存的行,然后并行调用一个函数来破坏它们的连接。

现在我对清理后的 SSD 进行了新分区,我尝试像这样调用并行:

cat $hdd_file | grep $ssd | parallel -C '\t' create_new_cache :::+ `seq $partitions_per_ssd`

它应该从管道中获取参数并将它们与给定的数字配对,但事实并非如此。

cat $hdd_file | grep $ssd | parallel -C '\t' create_new_cache ::: {} :::+ `seq $partitions_per_ssd`

我也尝试过这个,但仍然不起作用。由于某种原因,{} :::+ 作为参数传递

答案1

GNUparallel解决方案:

示例input.txt(用于演示):

a   b
c   d
e   f

grep '^[ac]' input.txt将用于模拟命令(或管道),就像输入源文件一样


parallel -C '\t' echo :::: <(grep '^[ac]' input.txt) ::: $(seq 1 3)

输出:

a b 1
a b 2
a b 3
c d 1
c d 2
c d 3

  • :::: argfiles-argfiles视为输入源。:::并且::::可以混合。

要聚合来自每个输入源的元素 - 添加--xapply选项:

parallel -C '\t' --xapply echo :::: <(grep '^[ac]' input.txt) ::: $(seq 1 2)

输出:

a b 1
c d 2

相关内容