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
。