Bash

使用並行執行具有來自列表的多個參數的程序

  • July 8, 2021

我有一個通過命令行(Ubuntu)執行的 bash 程序,如下所示:

./extract_field.sh ABC001

ABC001我想從給定的 shapefile 中提取的欄位 ID在哪裡。

list.txt要使用多個 ID 執行此腳本,我首先在文件中每行保存一個 ID :

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

等等。

那正確嗎?

我可以在詢問之前對其進行測試,但我決定先詢問,因為腳本中的這個更改可能需要我幾個小時才能完成(儘管這聽起來像是一個簡單的更改)。

您可以通過在命令語法中指定列分隔符來為單個命令提供多個參數並行使用您的範例:

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

您可以使用cpmv因為它們都需要多個位置參數來測試它。

有用的並行手冊頁

引用自:https://unix.stackexchange.com/questions/657586