使用并行运行具有列表中多个参数的程序

使用并行运行具有列表中多个参数的程序

我有一个通过命令行(Ubuntu)运行的 bash 程序,如下所示:

./extract_field.sh ABC001

其中ABC001是我想要从给定 shapefile 中提取的字段 ID。

要使用多个 ID 运行此脚本,我首先在文件中每行保存一个 ID list.txt

ABC001
ABC014
ABC213
ABC427

然后使用以下命令调用脚本parallel

parallel -a list.txt ./extract_field.sh

到目前为止,一切都很好。

但是,我计划进行更改extract_field.sh,以便需要两个参数,而不是只有一个。如果我只是更改文本文件以容纳这样的每行两个参数,上述工作流程是否仍然有效?

ABC001 arg2a
ABC014 arg2b
ABC213 arg2c
ABC427 arg2d

有了这个改变,我希望parallel -a list.txt ./extract_field.sh表现得像

./extract_field.sh ABC001 arg2a
./extract_field.sh ABC014 arg2b

等等。

是对的吗?

我可以在询问之前先测试一下,但我决定先询问,因为脚本中的这一更改可能需要我几个小时才能完成(尽管这听起来像是一个简单的更改)。

答案1

您可以通过在命令语法中指定列分隔符来向具有并行功能的单个命令提供多个参数要使用您的示例:

parallel --colsep ' ' -a list.txt ./extractfield.sh {1} {2}

将提供以下结果

./extract_field.sh ABC001 arg2a
./extract_field.sh ABC014 arg2b

鉴于您的文件list.txt包含

ABC001 arg2a
ABC014 arg2b

您可以使用cp或进行测试mv,因为它们都需要多个位置参数。

有用的并行联机帮助页

相关内容