GNU parallel

最近、GNU paralle というものを知ったので軽くメモ。

  • xargs や cat | bash の代わりに使えるもの
  • 並列に処理を実行させられる(標準だと出力は処理単位にまとめられる)
  • 複数のホストに処理を実行させられる

というあたりが代表的な特徴でしょうか。

  • for や while の代わりに使ってループを書く
  • inotifywait と連携してディレクトリへのファイル追加などをトリガに処理を起動させる
  • tail -f などでファイル入力を継続読み込みしてジョブキューとして利用する

という特徴的な用途もある様です。

  • find の + の様に「とれるだけの引数をとる」事もできる(最大数を指定することもできる)
  • 出力を引数の順番通りに並べられる
  • リモートホストにファイルを転送してからリモートで処理を実行し、結果をローカルに戻す事も出来る
  • 一つの処理で複数の入力を受け付けられる(複数の行であったり、複数のカラムであったり)
  • カウンティングセマフォミューテックスによる排他制御

というあたりも挙げておきます。