コマンドの並列処理を行う際、個人的にはGNU Parallelコマンドを使用するか、xargsで-Pオプションを付与するかのどちらかを使うことが多いのだが、GNU Parallelのオプションや使い方についてちゃんと調べた事がなかったので、調べてまとめてみることにする。 なお、検証に利用するGNU parallelのバージョンは以下。
blacknon@BS-PUB-DEVELOP:~$ parallel --version
GNU parallel 20141022
Copyright (C) 2007,2008,2009,2010,2011,2012,2013,2014 Ole Tange and Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
GNU parallel comes with no warranty.
Web site: http://www.gnu.org/software/parallel
When using programs that use GNU Parallel to process data for publication please cite:
O. Tange (2011): GNU Parallel - The Command-Line Power Tool,
;login: The USENIX Magazine, February 2011:42-47.
Or you can get GNU Parallel without this requirement by paying 10000 EUR.
1. 基本的な使い方
GNU parallelはxargsを改善したxxargsというコマンドとparallelというコマンド、別々のプロジェクトを元にしたらしい(GNU Parallel: The Command-Line Power Tool History of GNU Parallel参照)のだが、xargsが参考にされているからか、使い方はxargsとあまり変わらない。
パイプ越しに出力を受け取る場合
出力コマンド | parallel 実行コマンド # コマンドの末尾に出力した値が入れられる
出力コマンド | parallel --no-notice 実行コマンド # 「--no-notice」で出力される警告文を非表示にする
出力コマンド | parallel --no-notice 実行コマンド {} # {}で値を差し込む
出力コマンド | parallel -I@ --no-notice 実行コマンド @ # xargsの-Iオプションのように差込みを意味する記号を指定する事もできる
blacknon@BS-PUB-DEVELOP:~$ seq 1 10 | parallel echo
When using programs that use GNU Parallel to process data for publication please cite:
O. Tange (2011): GNU Parallel - The Command-Line Power Tool,
;login: The USENIX Magazine, February 2011:42-47.
This helps funding further development; and it won't cost you a cent.
Or you can get GNU Parallel without this requirement by paying 10000 EUR.
To silence this citation notice run 'parallel --bibtex' once or use '--no-notice'.
1
2
3
4
5
6
7
8
9
10
blacknon@BS-PUB-DEVELOP:~$ seq 1 10 | parallel --no-notice echo
1
2
3
4
5
6
7
8
9
10
blacknon@BS-PUB-DEVELOP:~$ seq 1 10 | parallel --no-notice echo {}x
1x
2x
3x
4x
5x
6x
7x
8x
9x
10x
引数として指定する場合
引数として指定する場合、挿入する箇所に「::: 値1 値2...」という風にスペース区切りで代入することで使用する値を指定できる。
parallel --no-notice コマンド ::: 値1 値2 値3 ...
blacknon@BS-PUB-DEVELOP:~$ # ブレース展開を指定することもできる
blacknon@BS-PUB-DEVELOP:~$ parallel --no-notice echo ::: {a..e}
a
b
c
d
e
blacknon@BS-PUB-DEVELOP:~$
blacknon@BS-PUB-DEVELOP:~$ # 更に後ろに引数を指定することで、全組み合わせで実行させる
blacknon@BS-PUB-DEVELOP:~$ parallel --no-notice echo ::: {a..e} ::: {1..3}
a 1
a 2
a 3
b 1
b 2
b 3
c 1
c 2
c 3
d 1
d 2
d 3
e 1
e 2
e 3
ファイルから引数を得る場合
「-a ファイルPATH」で、指定したファイルから引数を得る事ができる。
blacknon@BS-PUB-DEVELOP:~$ cat test1.txt
192.168.0.102
192.168.0.8
192.168.0.97
192.168.0.168
192.168.0.99
192.168.0.66
192.168.0.24
blacknon@BS-PUB-DEVELOP:~$ parallel --no-notice -a test1.txt echo
192.168.0.102
192.168.0.8
192.168.0.97
192.168.0.168
192.168.0.99
192.168.0.66
192.168.0.24
ちなみにxargsと違いデフォルトでechoが実行されないので、コマンドを渡したらそのまま実行される。
blacknon@BS-PUB-DEVELOP:~$ echo -e "echo {1..20}\npwd\necho {a..z}" | parallel --no-notice
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
/home/blacknon
a b c d e f g h i j k l m n o p q r s t u v w x y z
2. 区切り文字を切り替える
デフォルトでは、パイプから受け付ける際の区切り文字は改行になるのだが、更に改行ごとに受け付けた値を「--colsep
」で分割して利用することができる。
分割して受け付けた値は「{1}
」「{2}
」といった形でコマンドの任意の箇所に挿入させることができる。
コマンド | parallel --colsep '区切り文字' --no-notice -- コマンド {1} {2} ...
blacknon@BS-PUB-DEVELOP:~$ echo {1..20} | xargs -n2
1 2
3 4
5 6
7 8
9 10
11 12
13 14
15 16
17 18
19 20
blacknon@BS-PUB-DEVELOP:~$ # 2列めを1列目に、1列目を2列めに表示させる
blacknon@BS-PUB-DEVELOP:~$ echo {1..20} | xargs -n 2 | parallel --colsep ' ' --no-notice -- echo {2} {1}
2 1
4 3
6 5
8 7
10 9
12 11
14 13
16 15
18 17
20 19
これを利用することで、CSVやTSVなどでカラム単位での処理が行えるようになる。 なお、NULL文字区切りにする場合は「-q0」オプションを付与する。
blacknon@BS-PUB-DEVELOP:~$ sudo find /tmp -print0 | parallel --no-notice -q0 echo
/tmp
/tmp/.Test-unix
/tmp/.font-unix
/tmp/.XIM-unix
/tmp/.ICE-unix
/tmp/tmptest794820130
/tmp/.X11-unix
/tmp/tmptest014865188
/tmp/systemd-private-2c86316b3d764907a804f3b0ed98bce2-systemd-timesyncd.service-jJHqjc
/tmp/systemd-private-2c86316b3d764907a804f3b0ed98bce2-systemd-timesyncd.service-jJHqjc/tmp
なお、デフォルトでは1行ごとに処理されるのだが、これを2行ごと、3行ごとに処理を行わせる場合、「-N」オプションで指定が可能だ。
blacknon@BS-PUB-DEVELOP:~$ find /tmp/test* | sort -V
/tmp/test.txt
/tmp/test1.txt
/tmp/test2.txt
/tmp/test3.txt
/tmp/test4.txt
/tmp/test5.txt
/tmp/test6.txt
/tmp/test7.txt
/tmp/test8.txt
/tmp/test9.txt
/tmp/test10.txt
blacknon@BS-PUB-DEVELOP:~$ find /tmp/test* | sort -V | parallel -N2 --no-notice echo
/tmp/test.txt /tmp/test1.txt
/tmp/test2.txt /tmp/test3.txt
/tmp/test4.txt /tmp/test5.txt
/tmp/test6.txt /tmp/test7.txt
/tmp/test8.txt /tmp/test9.txt
/tmp/test10.txt
blacknon@BS-PUB-DEVELOP:~$ find /tmp/test* | sort -V | parallel -N3 --no-notice echo
/tmp/test.txt /tmp/test1.txt /tmp/test2.txt
/tmp/test3.txt /tmp/test4.txt /tmp/test5.txt
/tmp/test6.txt /tmp/test7.txt /tmp/test8.txt
/tmp/test9.txt /tmp/test10.txt
3.処理の並列処理数等を制御する
GNU Parallelでは、デフォルトでは1コアにつき1ジョブで実行されるのだが、以下の用に-jオプションオプションを付与することで並列処理数を制御できる。
- -j N … コア数に関係なくNプロセスで並列実行する
- -j N% … 1コアあたりN%稼働でジョブを実行する
実際に、sleepを実行して同時実行プロセスを確認した結果が以下。 確かに、-jで指定したプロセス数が動作しているようだ。
blacknon@BS-PUB-DEVELOP:~$ echo {1000..1024} | xargs -n 1 | parallel -j12 --colsep ' ' --no-notice sleep {} &
[1] 14448
blacknon@BS-PUB-DEVELOP:~$ pstree -p 14448
bash(14448)qqqperl(14451)qwqsleep(14495)
tqsleep(14496)
tqsleep(14497)
tqsleep(14498)
tqsleep(14499)
tqsleep(14500)
tqsleep(14501)
tqsleep(14502)
tqsleep(14503)
tqsleep(14504)
tqsleep(14505)
mqsleep(14506)
blacknon@BS-PUB-DEVELOP:~$ pstree -p 14448 | wc -l
12
なお、ジョブを並列して実行する際に「--noswap」オプションを付与することでスワップが発生する場合は新しいジョブを実行しないようにすることもできる。
4. バッファさせずリアルタイムで出力させる
デフォルトの動作では、GNU Parallelは処理結果をバッファして出力するのだが、「-u」オプションを付与することで処理終了と同時に結果を出力してくれるようになる。 なお、「-u」だと出力順はバラバラなのだが、「-k」オプションだと入力順を保ったまま出力をしてくれる。
コマンド | parallel -u コマンド
コマンド | parallel -k コマンド
blacknon@BS-PUB-DEVELOP:~$ sudo find /tmp
/tmp
/tmp/.Test-unix
/tmp/.font-unix
/tmp/.XIM-unix
/tmp/.ICE-unix
/tmp/tmptest794820130
/tmp/tmptest111111111111111111111111111111111111111111
/tmp/.X11-unix
/tmp/tmptest014865188
/tmp/systemd-private-2c86316b3d764907a804f3b0ed98bce2-systemd-timesyncd.service-jJHqjc
/tmp/systemd-private-2c86316b3d764907a804f3b0ed98bce2-systemd-timesyncd.service-jJHqjc/tmp
blacknon@BS-PUB-DEVELOP:~$
blacknon@BS-PUB-DEVELOP:~$ # 順不同で終了順に出力
blacknon@BS-PUB-DEVELOP:~$ sudo find /tmp -print0 | parallel -u -q0 --no-notice -j30 bash -c 'a={} && sleep 0.$(echo ${#a}) && echo $a'
/tmp/.XIM-unix
/tmp/.ICE-unix
/tmp/.Test-unix
/tmp/.X11-unix
/tmp/.font-unix
/tmp/tmptest794820130
/tmp/tmptest014865188
/tmp
/tmp/tmptest111111111111111111111111111111111111111111
/tmp/systemd-private-2c86316b3d764907a804f3b0ed98bce2-systemd-timesyncd.service-jJHqjc
/tmp/systemd-private-2c86316b3d764907a804f3b0ed98bce2-systemd-timesyncd.service-jJHqjc/tmp
blacknon@BS-PUB-DEVELOP:~$
blacknon@BS-PUB-DEVELOP:~$ # 順番を保ったままで終了後即出力
blacknon@BS-PUB-DEVELOP:~$ sudo find /tmp -print0 | parallel -k -q0 --no-notice -j30 bash -c 'a={} && sleep 0.$(echo ${#a}) && echo $a'
/tmp
/tmp/.Test-unix
/tmp/.font-unix
/tmp/.XIM-unix
/tmp/.ICE-unix
/tmp/tmptest794820130
/tmp/tmptest111111111111111111111111111111111111111111
/tmp/.X11-unix
/tmp/tmptest014865188
/tmp/systemd-private-2c86316b3d764907a804f3b0ed98bce2-systemd-timesyncd.service-jJHqjc
/tmp/systemd-private-2c86316b3d764907a804f3b0ed98bce2-systemd-timesyncd.service-jJHqjc/tmp
5.大きいファイルを分割して並列実行させる
大きいファイルを分割してコマンドに渡して並列実行させる場合、「-L 分割する行数」オプションを付与して実行することで指定した行数に分割して処理してくれるようになる。 以下の例では、1~10000までの出力を1000件ごとに分割して処理を行わせている。
blacknon@BS-PUB-DEVELOP:~$ seq 1 10000 | parallel --no-notice -j30 -k -L 1000 'printf {1}" " && echo {} | tr " " "\n" | wc -l'
1 1000
1001 1000
2001 1000
3001 1000
4001 1000
5001 1000
6001 1000
7001 1000
8001 1000
9001 1000
6.利用するインプットから拡張子・ディレクトリを除去するetc...
GNU Parallelでは、{.}で拡張子を、{/}でディレクトリを除去してコマンドに渡す事ができる。 また、Perlの正規表現を記述することも可能なようだ。以下の他、「--plus」オプションと組み合わせることで拡張子のみを抽出して利用したりといったことも可能なようだ。
- {.} … 拡張子を除去
- {/} … ディレクトリを除去
- {/.} … 拡張子とディレクトリを除去
- {//} … ディレクトリ名のみを抽出
- {#} … 実行されるジョブ番号
- {%} … 実行されるジョブのスロット番号
- {= Perlの評価式 =} … Perlの評価式を利用する($_で引数を使用できる)
blacknon@BS-PUB-DEVELOP:~$ find /tmp/test* | sort -V
/tmp/test1.txt
/tmp/test2.txt
/tmp/test3.txt
/tmp/test4.txt
/tmp/test5.txt
/tmp/test6.txt
/tmp/test7.txt
/tmp/test8.txt
/tmp/test9.txt
/tmp/test10.txt
blacknon@BS-PUB-DEVELOP:~$ find /tmp/test* | sort -V | parallel --no-notice echo {}
/tmp/test1.txt
/tmp/test2.txt
/tmp/test3.txt
/tmp/test4.txt
/tmp/test5.txt
/tmp/test6.txt
/tmp/test7.txt
/tmp/test8.txt
/tmp/test9.txt
/tmp/test10.txt
blacknon@BS-PUB-DEVELOP:~$ find /tmp/test* | sort -V | parallel --no-notice echo {.}
/tmp/test1
/tmp/test2
/tmp/test3
/tmp/test4
/tmp/test5
/tmp/test6
/tmp/test7
/tmp/test8
/tmp/test9
/tmp/test10
blacknon@BS-PUB-DEVELOP:~$ find /tmp/test* | sort -V | parallel --no-notice echo {/}
test1.txt
test2.txt
test3.txt
test4.txt
test5.txt
test6.txt
test7.txt
test8.txt
test9.txt
test10.txt
blacknon@BS-PUB-DEVELOP:~$ find /tmp/test* | sort -V | parallel --no-notice echo {/.}
test1
test2
test3
test4
test5
test6
test7
test8
test9
test10
なお、--colsepなどと組み合わせる場合は{1/.}
のように先に数字を入れる。
blacknon@BS-PUB-DEVELOP:~$ find /tmp/test* | sort -V | xargs -n2
/tmp/test1.txt /tmp/test2.txt
/tmp/test3.txt /tmp/test4.txt
/tmp/test5.txt /tmp/test6.txt
/tmp/test7.txt /tmp/test8.txt
/tmp/test9.txt /tmp/test10.txt
blacknon@BS-PUB-DEVELOP:~$ find /tmp/test* | sort -V | xargs -n2 | parallel --colsep ' ' --no-notice echo {1/} {2.}
test1.txt /tmp/test2
test3.txt /tmp/test4
test5.txt /tmp/test6
test7.txt /tmp/test8
test9.txt /tmp/test10
7. 実行するコマンドを出力する(処理は行わせない)
コマンドは実行せず、指定した条件で実行がされるコマンドを表示して確認したい場合は、「--dry-run」オプションを付与することでコマンドの確認ができる。
blacknon@BS-PUB-DEVELOP:~$ find /tmp/test* | sort -V | parallel --dry-run -j 10 --no-notice echo {}
echo /tmp/test.txt
echo /tmp/test1.txt
echo /tmp/test2.txt
echo /tmp/test3.txt
echo /tmp/test4.txt
echo /tmp/test5.txt
echo /tmp/test6.txt
echo /tmp/test7.txt
echo /tmp/test8.txt
echo /tmp/test9.txt
echo /tmp/test10.txt
8. 並列実行したジョブの実行結果(標準出力など)をジョブごとにファイルに出力する
「--result ディレクトリPATH」を指定することで、指定したディレクトリ配下に実行したジョブの標準出力や標準エラー出力をジョブごとにディレクトリを分けて出力してくれるようになる。
blacknon@BS-PUB-DEVELOP:~$ parallel --result ./parallel_out --no-notice echo ::: 1 2 3 4 5
1
2
3
4
5
blacknon@BS-PUB-DEVELOP:~$ ls -la ./parallel_out/1/*/*
-rw-rw-r-- 1 blacknon blacknon 0 7月 7 00:04 ./parallel_out/1/1/stderr
-rw-rw-r-- 1 blacknon blacknon 2 7月 7 00:04 ./parallel_out/1/1/stdout
-rw-rw-r-- 1 blacknon blacknon 0 7月 7 00:04 ./parallel_out/1/2/stderr
-rw-rw-r-- 1 blacknon blacknon 2 7月 7 00:04 ./parallel_out/1/2/stdout
-rw-rw-r-- 1 blacknon blacknon 0 7月 7 00:04 ./parallel_out/1/3/stderr
-rw-rw-r-- 1 blacknon blacknon 2 7月 7 00:04 ./parallel_out/1/3/stdout
-rw-rw-r-- 1 blacknon blacknon 0 7月 7 00:04 ./parallel_out/1/4/stderr
-rw-rw-r-- 1 blacknon blacknon 2 7月 7 00:04 ./parallel_out/1/4/stdout
-rw-rw-r-- 1 blacknon blacknon 0 7月 7 00:04 ./parallel_out/1/5/stderr
-rw-rw-r-- 1 blacknon blacknon 2 7月 7 00:04 ./parallel_out/1/5/stdout
blacknon@BS-PUB-DEVELOP:~$ cat ./parallel_out/1/*/stdout
1
2
3
4
5
普通にリダイレクトで各ジョブごとの出力を別々のファイルに出力させるのであれば、実行コマンドをダブルクォーテーションなどで囲ってやるといいだろう。
blacknon@BS-PUB-DEVELOP:~$ mkdir testp
blacknon@BS-PUB-DEVELOP:~$ echo {a..e}{{1..5},.txt} | xargs -n 6
a1 a2 a3 a4 a5 a.txt
b1 b2 b3 b4 b5 b.txt
c1 c2 c3 c4 c5 c.txt
d1 d2 d3 d4 d5 d.txt
e1 e2 e3 e4 e5 e.txt
blacknon@BS-PUB-DEVELOP:~$ echo {a..e}{{1..5},.txt} | xargs -n 6 | parallel -C ' ' --no-notice "echo {1}_{2}_{3}_{4}_{5} > testp/{6}"
blacknon@BS-PUB-DEVELOP:~$ ls -al testp/
合計 28
drwxrwxr-x 2 blacknon blacknon 4096 7月 7 01:05 .
drwxr-xr-x 38 blacknon blacknon 4096 7月 7 01:05 ..
-rw-rw-r-- 1 blacknon blacknon 15 7月 7 01:05 a.txt
-rw-rw-r-- 1 blacknon blacknon 15 7月 7 01:05 b.txt
-rw-rw-r-- 1 blacknon blacknon 15 7月 7 01:05 c.txt
-rw-rw-r-- 1 blacknon blacknon 15 7月 7 01:05 d.txt
-rw-rw-r-- 1 blacknon blacknon 15 7月 7 01:05 e.txt
blacknon@BS-PUB-DEVELOP:~$ cat testp/a.txt
a1_a2_a3_a4_a5
9. 各ジョブの実行コマンドや処理時間をログに出力する
各ジョブの実行コマンドや処理時間と言った情報をログに残しておく場合は、「--joblog logファイルPATH」で出力ログを指定することで記録をすることができる。
blacknon@BS-PUB-DEVELOP:~$ echo {a..e}{{1..5},.txt} | xargs -n 6 | parallel --joblog parallel.log -C ' ' --no-notice "echo {1}_{2}_{3}_{4}_{5} > testp/{6}"
blacknon@BS-PUB-DEVELOP:~$ cat parallel.log
Seq Host Starttime JobRuntime Send Receive Exitval Signal Command
1 : 1499357236.686 0.004 0 0 0 0 echo a1_a2_a3_a4_a5 > testp/a.txt
2 : 1499357236.691 0.006 0 0 0 0 echo b1_b2_b3_b4_b5 > testp/b.txt
3 : 1499357236.697 0.004 0 0 0 0 echo c1_c2_c3_c4_c5 > testp/c.txt
4 : 1499357236.701 0.005 0 0 0 0 echo d1_d2_d3_d4_d5 > testp/d.txt
5 : 1499357236.706 0.000 0 0 0 0 echo e1_e2_e3_e4_e5 > testp/e.txt
10. ssh経由でリモートサーバでジョブを並列実行させる
各ノードにパスワード入力無しでssh接続できる場合、GNU Parallelを用いて各ノードにssh接続して同じ処理をするといった事も可能だ。 複数のコマンドを実行する場合は、「' "sshで実行するコマンド1;コマンド2" '」というように、ダブルクォーテーションで囲んだ範囲を更にシングルクォーテーションで囲んでやると良いだろう。 (公開鍵の設定をしておらずパスワード認証しか無い場合、鍵登録のため初回だけsshpassを用いるのもいいだろう。)
blacknon@BS-PUB-DEVELOP:~$ cat ./parallel_test.list
blacknon@BS-PUB-UBUNTU-01
root@BS-PUB-CENT7-01
root@BS-PUB-CENT7-02
blacknon@BS-PUB-DEVELOP:~$
blacknon@BS-PUB-DEVELOP:~$ cat ./parallel_test.list | parallel --no-notice ssh -i parallel_test.key {} 'hostname -A'
BS-PUB-CENT7-01 BS-PUB-CENT7-01.blacknon.local
BS-PUB-UBUNTU-01.BLACKNON.LOCAL
BS-PUB-CENT7-02.BLACKNON.LOCAL BS-PUB-CENT7-02.blacknon.local
blacknon@BS-PUB-DEVELOP:~$
blacknon@BS-PUB-DEVELOP:~$ # 複数コマンドを実行する場合は、内部で""(ダブルクォーテーション)で囲んでやる
blacknon@BS-PUB-DEVELOP:~$ cat ./parallel_test.list | parallel --no-notice ssh -i parallel_test.key {} '"hostname;pwd;uname -a"'
BS-PUB-CENT7-01.blacknon.local
/root
Linux BS-PUB-CENT7-01.blacknon.local 3.10.0-514.2.2.el7.x86_64 #1 SMP Tue Dec 6 23:06:41 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
BS-PUB-UBUNTU-01
/home/blacknon
Linux BS-PUB-UBUNTU-01 4.4.0-71-generic #92-Ubuntu SMP Fri Mar 24 12:59:01 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
BS-PUB-CENT7-02.blacknon.local
/root
Linux BS-PUB-CENT7-02.blacknon.local 3.10.0-514.6.1.el7.x86_64 #1 SMP Wed Jan 18 13:06:36 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
頭にホスト名がほしい場合、機能としては存在してないようなので、awkと組み合わせてホスト名を行頭に差し込んでやるといいだろう。
blacknon@BS-PUB-DEVELOP:~$ cat ./parallel_test.list | parallel --no-notice ssh -i parallel_test.key {} '"hostname;pwd;uname -a" | awk "{ print \"{} :\" \$0}"'
root@BS-PUB-CENT7-01 :BS-PUB-CENT7-01.blacknon.local
root@BS-PUB-CENT7-01 :/root
root@BS-PUB-CENT7-01 :Linux BS-PUB-CENT7-01.blacknon.local 3.10.0-514.2.2.el7.x86_64 #1 SMP Tue Dec 6 23:06:41 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
root@BS-PUB-CENT7-02 :BS-PUB-CENT7-02.blacknon.local
root@BS-PUB-CENT7-02 :/root
root@BS-PUB-CENT7-02 :Linux BS-PUB-CENT7-02.blacknon.local 3.10.0-514.6.1.el7.x86_64 #1 SMP Wed Jan 18 13:06:36 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
blacknon@BS-PUB-UBUNTU-01 :BS-PUB-UBUNTU-01
blacknon@BS-PUB-UBUNTU-01 :/home/blacknon
blacknon@BS-PUB-UBUNTU-01 :Linux BS-PUB-UBUNTU-01 4.4.0-71-generic #92-Ubuntu SMP Fri Mar 24 12:59:01 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
11. 進捗状況を表示させる
GNU Parallelでは、以下のように「--progress」もしくは「--eta(こちらの方が細かい情報が出力される)」を付与することで進捗状態を表示させることができる。
また、2017年07月段階ではテスト中のようだが、「--bar」オプションを付与することでプログレスバーを表示させて進捗状況を確認することができるようだ。
参考
- GNU Parallel
- GNU Parallel: The Command-Line Power Tool
- GNU Parallel作者が書いたParallel:The Command-Line Power Toolを読んだ | Siguniang's Blog
- KOSHIGOE学習帳 - [system] GNU parallel 使用例
- GNU parallel でコマンドを並列実行する - それマグで!
- 「今日から使い切る」 ための GNU Parallel による並列処理入門