我有一个包含很多行的文件,并且在每一行上都有我想要与制表符分隔符并行传递的参数。
我运行这个脚本
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