基于xargs命令的多行命令并行管理

我在去年整理了一個(gè)關(guān)于多行命令并行管理的腳本「submit.sh」,前些日子曾老師發(fā)來(lái)消息提供了更新的版本,今天我們一起來(lái)探討一下。

之前的submit.sh主要是通過(guò)循環(huán),將所有的命令分成多個(gè)批次,一個(gè)批次完成后才會(huì)運(yùn)行下一個(gè)批次。

#?submit.sh
#?把命令分為10份并行
for?i?in?{0..9};do?(nohup?bash?submit.sh?script2.sh?10?$i?2>&1);done?

今天要介紹的多行命令并行管理主要是基于xargs這個(gè)命令。

ls?*fastq?|?xargs?-iF?-P?10?sh?-c??'gzip?F'

xargs

關(guān)于xargs的用法我曾在之前的推文有提過(guò),不過(guò)沒(méi)有深入太多。

本次主要用到它以下幾個(gè)參數(shù)

  • 「-i」, --replace[=R], replace R in INITIAL-ARGS with names read from standard input; if R is unspecified,assume {} : 將xargs傳遞的內(nèi)容一行一行賦值給 {},「-iF」即將xargs的輸出一行一行賦值給F。

  • 「-P」, --max-procs=MAX-PROCS ? ?run at most MAX-PROCS processes at a time : 最大進(jìn)程數(shù)

sh

關(guān)于sh命令的用法,可以查看我提供的參考資料[1],本文主要使用以下參數(shù)

  • 「-c」, 從-c后的字符串中讀取命令
  • 「-x」, 打印出所執(zhí)行的命令以及當(dāng)前狀態(tài)

特殊符號(hào)

  • 「''」, 單引號(hào),保持引號(hào)里的內(nèi)容不變
  • 「“”」, 雙引號(hào),解析引號(hào)里的命令和變量
  • 「``」, 反引號(hào),引號(hào)內(nèi)部為命令,與$()等價(jià)

示例

以fastqc質(zhì)控為例,本次測(cè)試數(shù)據(jù)為GSE145894中的三個(gè)數(shù)據(jù)SRR11178348、SRR11178349、SRR11178350,前面的步驟就不多做展示,直接從fastqc質(zhì)控開(kāi)始。

一共有6個(gè)文件,每次運(yùn)行3個(gè)試試

ls?*.gz?|?xargs?-iF?-P?3?sh?-c?'fastqc?-o?./?F'

我們使用htop查看xargs的進(jìn)程情況,發(fā)現(xiàn)其處在休眠狀態(tài)(S),PID是28925。

kill掉該進(jìn)程后,我們發(fā)現(xiàn)只有第一批次的三條命令運(yùn)行完成,當(dāng)這一批的命令結(jié)束以后,后面將不再運(yùn)行下一批的命令。

小結(jié)

使用xargs的好處是可以將該命令寫(xiě)入到代碼中,適用于流程搭建的情況(如snakemake);而之前的submit.sh只能在腳本外面使用,實(shí)際上還會(huì)產(chǎn)生多個(gè)PID。在遇到特殊情況需要kill任務(wù)的情況,使用xargs就可以直接kill母命令的PID,而submit.sh只能一個(gè)個(gè)的kill或killall。

另外需要注意的是,xargs 只能傳遞單個(gè)變量(本文中為F),上述命令通過(guò)-iF來(lái)傳遞ls輸出的內(nèi)容;當(dāng)需要輸入多個(gè)文件的時(shí)候(如比對(duì)),似乎是沒(méi)辦法實(shí)現(xiàn)的。

歡迎各位交流討論。

參考資料

[1]sh命令: https://wangchujiang.com/linux-command/c/sh.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容