xargs 平行化處理指令

Posted on Tue 19 July 2016 in note

直接先上範例

xargs -a data.txt -I % -P 0 bash -c "sleep 1; echo %"

我要解決的問題是,我有一個文字檔 data.txt,其內容是我要處理的資料,一行一筆。我希望可以同時處理這些資料。答案就是上面的範例。 data.txt 的內容是

a
b
c
d
e
f

現在來解釋一下參數:

  • -a data.txt

    從 data.txt 直接讀入參數,而不是從 STDIN

  • -P 0

    最大執行的 process 數量。平行化的主要參數,0 是盡可能大。以範例來看的話,設 -P 2,你就會看到一秒印兩行字。

    ( 等一秒 )
    a
    b
    ( 等一秒 )
    c
    d
    ( 等一秒 )
    e
    f

  • -I %

    將後面的命令中的 % 換成 data.txt 中你要塞進來的參數。範例會被展開底下的樣子。% 可以換成其他字串,像{}

    bash -c "sleep 1; echo a"
    bash -c "sleep 1; echo b"
    bash -c "sleep 1; echo c"
    bash -c "sleep 1; echo d"
    bash -c "sleep 1; echo e"
    bash -c "sleep 1; echo f"

    另外,用了 -I 同時也隱含啟用了 -L 1