我有一个通过命令行(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
,因为它们都需要多个位置参数。