ファイルの各行に対してシェルスクリプトを並行して実行する

snate

以下に示すようなデータを含む区切り(|)入力ファイル(TableInfo.txt)があります

dbName1|Table1
dbName1|Table2
dbName2|Table3
dbName2|Table4
...

各行を解析し、dbName、TableNameなどの行から引数を渡す実行可能ファイルを呼び出すシェルスクリプト(LoadTables.sh)があります。このプロセスは、SQL Serverからデータを読み取り、それをHDFSにロードします。

while IFS= read -r line;do
    fields=($(printf "%s" "$line"|cut -d'|' --output-delimiter=' ' -f1-))
    query=$(< ../sqoop/"${fields[1]}".sql)
    sh ../ProcessName "${fields[0]}" "${fields[1]}" "$query"
done < ../TableInfo.txt

現在、私のプロセスはファイル内の各行に対して順番に実行されており、ファイル内のエントリ数に基づいて時間がかかります。

プロセスを並行して実行する方法はありますか?xargs / GNU parallel / ampersandおよびwaitオプションの使用について聞いたことがあります。私はそれを構築して使用する方法に精通していません。どんな助けでも大歓迎です。

注:LinuxマシンにGNUパラレルをインストールしていません。したがって、アンパサンドと待機オプションの使用に関するいくつかの短所を聞いたので、xargsが唯一のオプションです。

チャールズ・ダフィー

&背景に移動したい行の終わりにを置きます。コードで使用されているばかげた(バギー)配列分割メソッドをread独自のフィールド分割に置き換えると、次のようになります。

while IFS='|' read -r db table; do
    ../ProcessName "$db" "$table" "$(<"../sqoop/${table}.sql")" &
done < ../TableInfo.txt

... FYI、re:「バギー」について私が意味したこと-

fields=( $(foo) )

...文字列分割だけでなく、foo;の出力でグロブも実行します。したがって、*出力のaは、現在のディレクトリ内のファイル名のリストに置き換えられます。このような名前は、foo[bar]名前のファイルに置き換えることができfoobfooaまたはfoorglobfailシェルのオプションが失敗した結果に、このような拡張を引き起こす可能性があり、nullglobそれが空の結果につながる可能性がありますシェルオプション。


GNU xargsがある場合は、次のことを考慮してください。

# assuming you have "nproc" to get the number of CPUs; otherwise, hardcode
xargs -P "$(nproc)" -d $'\n' -n 1 bash -c '
  db=${1%|*}; table=${1##*|}
  query=$(<"../sqoop/${table}.sql")
  exec ../ProcessName "$db" "$table" "$query"
  ' _ < ../TableInfo.txt

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

シェルスクリプトとzipファイルを1つの実行可能ファイルに結合して展開する

.envファイルを使用してシェルスクリプトを実行する

シェルスクリプトを使用して/ etc / hostsファイルに行を追加する

複数のファイルに対してスペルチェックを実行し、シェルスクリプトに不正な単語を表示する方法

シェルスクリプトを使用して複数の.javaファイルを実行する方法

bash / linuxでシェルスクリプトを並行して実行する

FIND&EXECを使用して、ファイル名が必要なPerlスクリプトを複数のファイルに対して実行する

シェルスクリプト:実行可能ファイルの代わりに変数を出力として使用する方法はありますか?

シェルスクリプト:2行を異なる行として印刷しますが、csvファイルの同じセルに印刷します

Finderで選択したファイルに対してBashスクリプトを実行します

シェルスクリプトを使用してファイルの途中に行を追加する

docker runを使用して、任意のファイルに対して引数を指定してシェルスクリプトを実行します

シェルスクリプトを使用して実行可能ファイルを実行する

シェルスクリプトの実行中に、スクリプト出口を保存した後、.txtファイルを作成して編集しました

あるマシンでresource(.txtファイル)を使用してssh上でシェルスクリプトを実行し、別のマシンでスクリプトを実行するにはどうすればよいですか?

スクリプトを使用してバッチファイルでdjangoシェルを実行する

Bashスクリプト-ファイルの行に対応するコマンドを実行します

Pythonスクリプトを実行してシェルファイルを実行するときに終了コード191

シェルスクリプトを使用して複数の単語と対応するファイル行を削除する方法

シェルスクリプトを使用して、削除されたファイルの行を他のファイルにリダイレクトする方法

複数のファイルに対してtabixコマンドを実行するためのシェルスクリプト

Linuxシェル:複数のファイルリストを繰り返し、ファイルの各行でアクションを実行する方法は?

入力として複数のファイルでシェルスクリプトを実行する

一度に X ファイルに対してコマンドを実行する Bash スクリプト

多くのファイルに対してPythonスクリプトを実行する方法は?

ロジックアプリからAzureファイルサービスの新しいファイルに対してアクションを実行する

シェル-ディレクトリ内のすべてのファイルに対してimagemagicを実行し、結果を保存します

シェルスクリプトを使用して、各行に存在するファイルのファイル拡張子を取得するには

シェルスクリプトを使用してファイルに行の配列を追加する

TOP 一覧

  1. 1

    Unity:未知のスクリプトをGameObject(カスタムエディター)に動的にアタッチする方法

  2. 2

    セレンのモデルダイアログからテキストを抽出するにはどうすればよいですか?

  3. 3

    Ansibleで複数行のシェルスクリプトを実行する方法

  4. 4

    tkinterウィンドウを閉じてもPythonプログラムが終了しない

  5. 5

    Crashlytics:コンパイラー生成とはどういう意味ですか?

  6. 6

    GoDaddyでのCKEditorとKCfinderの画像プレビュー

  7. 7

    Windows 10 Pro 1709を1803、1809、または1903に更新しますか?

  8. 8

    Chromeウェブアプリのウェブビューの高さの問題

  9. 9

    モーダルダイアログを自動的に閉じる-サーバーコードが完了したら、Googleスプレッドシートのダイアログを閉じます

  10. 10

    Windows 10の起動時間:以前は20秒でしたが、現在は6〜8倍になっています

  11. 11

    Reactでclsxを使用する方法

  12. 12

    ファイル内の2つのマーカー間のテキストを、別のファイルのテキストのセクションに置き換えるにはどうすればよいですか?

  13. 13

    MLでのデータ前処理の背後にある直感

  14. 14

    グラフからテーブルに条件付き書式を適用するにはどうすればよいですか?

  15. 15

    Pythonを使用して同じ列の同じ値の間の時差を取得する方法

  16. 16

    mutate_allとifelseを組み合わせるにはどうすればよいですか

  17. 17

    ネットワークグラフで、ネットワークコンポーネントにカーソルを合わせたときに、それらを強調表示するにはどうすればよいですか?

  18. 18

    テキストフィールドの値に基づいて UIslider を移動します

  19. 19

    BLOBストレージからデータを読み取り、Azure関数アプリを使用してデータにアクセスする方法

  20. 20

    PowerShellの分割ファイルへのヘッダーの追加

  21. 21

    ソートされた検索、ターゲット値未満の数をカウント

ホットタグ

アーカイブ