【シェルスクリプト】xargsでお手軽に並列処理をやってみる

どーも、ぐるたか@guru_takaです。

shellscriptで重い処理をマルチで実行する必要があったのですが、その時に並列処理できるxargsの存在を知りました

実際に試したのですが、本当に並列処理でき、感動したのでシェアします!参考になれば幸いです。

xargsとは?

xargsとは、以下のようなコマンドになります。
標準入力やファイルからリストを読み込み、コマンドラインを作成して実行する
引用:【 xargs 】コマンド――コマンドラインを作成して実行する

標準入力から受け取ったデータを引数に、コマンドを実行できる感じです。

引数を渡した並列処理のコマンド

xargsのオプションに-Pをつけると、並列処理できます。

サンプルをみた方がわかりやすいので、早速紹介します。

並列処理のサンプル

echo.sh
#!/bin/zsh

echo "catch $1"

# 実行時間 待機
sleep 1

echo "hello $1"

そしてコマンドを以下のように打ち込んでみます。

コマンドライン
$ seq 5 | xargs -P 5 -I{} sh ./echo.sh {}

処理の流れはこんな感じ!

STEP.1
seq 5 |
1, 2 … 5のデータをxargsにパス
STEP.2
xargs -P 5
並列処理(プロセス数は5に指定)
STEP.3
-I{} sh ./echo.sh {}
パスされたデータ1, 2 … 10を第1引数{}としてsh ./echo.shにパス

実行結果は以下のようになります。

結果
catch 1
catch 2
catch 3
catch 4
catch 5
hello 1
hello 2
hello 3
hello 4
hello 5

見事に並列処理できています!

並列処理のオプション-Pを外すと、結果は歴然!

コマンドライン
$ seq 5 | xargs -I{} sh ./echo.sh {}
catch 1
hello 1
catch 2
hello 2
catch 3
hello 3
catch 4
hello 4
catch 5
hello 5

実際にやってみると、処理時間の違いも体験できます。並列処理つよい!

最後に

以上になります。xargsを使いこなせば、様々な処理を短い構文で高速に処理できます!

使うタイミングがありましたら、ぜひお試しください。感動しますよ!笑

参考リンク

参考 xargs を使ってカジュアルに並列処理たごもりすメモ<br /> 参考 xargsでサクッと書くQiita

コメントを残す