ジョブを並列に実行し、単一ファイルに書き込む

ジョブを並列に実行し、単一ファイルに書き込む
#!/bin/bash
  range=$(seq -f "ma%04g" 5001 5505)
  for n in $range;do
      ping -q -c 1 -w 3 -s 10 $n >/dev/null
      if [ $? -eq 0 ];then
          awk -F, -v key="${n}" -v val="up" -v OFS="," '$1==key{$2=val}' /tmp/master.csv > /tmp/temptest.csv
          cp /tmp/temptest.csv /tmp/master.csv
      else
          awk -F, -v key="${n}" -v val="down" -v OFS="," '$1==key{$2=val}' /tmp/master.csv > /tmp/temptest.csv
          cp /tmp/temptest.csv /tmp/master.csv
  done

このフォーラムのどこからでも同じクエリを要求したかどうかはわかりませんが、xargsを使用または並列化してこのプロセスをスピードアップして結果を得る方法がわかります。 /tmp/master.csvファイルも空になりますか?

ベストアンサー1

Gnuはparallelループを簡単に実行できますが、繰り返しごとにCSVファイルを変更しないでください。出力を新しいファイルに収集し、それを既存のCSVにマージするか、ノード固有のデータがない場合は、最初から完全に新しいCSVファイルを作成するのが最善です。

おすすめ記事