次のファイルは実行されますが、何もしませんが、エラーは発生しません。
while read dates; do ./avg_hrly_all_final.sh ${dates}; done < ./dates_all.csv
「dates_all.csv」には、次の形式の日付のリストがあります。
2005 01
2005 02
2005 03
私が "avg_hrly_all_final.sh"と呼ぶスクリプトは、2つの位置パラメータを渡すことによって機能します。たとえば、次のようになります。
./avg_hrly_all_final.sh 2005 01
フォローアップ
xargs -n2 ./the_script.sh <./dates_to_pass.csv
OR
while read dates; do ./the_script.sh ${dates}; done <./dates_to_pass.csv
動作します。渡したファイルの日付が、コマンドを実行しているコンピューターで予想される「行末」タイプと同じであることを確認してください。
答え1
これは次のとおりですxargs
。
printf %s\\n '#!/bin/sh' 'printf "<%s>\n" "$$" "$@"' >avg_hourly.sh
chmod +x ./avg_hourly.sh
xargs -n2 ./avg_hourly.sh <<\IN
2005 01
2005 02
2005 03
IN
xargs
デフォルトは空白に分割され、-n2
指定されたコマンドは引数が発生するたびに1回呼び出されます。avg_hourly.sh
そこに1行に1つの引数を印刷し、両端で同じ形式で区切られ、<
PIDに従う小さなダミースクリプトを作成しました。>
上記は次のとおりです。
<1115>
<2005>
<01>
<1116>
<2005>
<02>
<1117>
<2005>
<03>
...デモ用だけです。しかし、おそらく<./dates_all.csv
私の文書の代わりに<<\IN
この文書を入力として使用する必要があります。
答え2
GNU Parallelがある場合は、次のことができます。
parallel --colsep ' ' ./avg_hrly_all_final.sh {1} {2} :::: ./dates_all.csv
csvファイルの最初の行がヘッダーの場合は、次のことができます。
parallel --header : --colsep ' ' ./avg_hrly_all_final.sh {Year} {Month} :::: ./dates_all.csv
GNU Parallelは、同じコンピュータまたはSSHを介してアクセスできる複数のコンピュータでタスクを並列に簡単に実行できる汎用の並列ハンドラです。
4つのCPUで32の異なるジョブを実行する場合は、並列化する簡単な方法は、各CPUで8つのジョブを実行することです。
代わりに、GNU Parallel はタスクが完了すると新しいプロセスを作成し、CPU をアクティブに保つことで時間を節約します。
インストールする
ディストリビューションにGNU Parallelがパッケージされていない場合は、rootアクセスなしでプライベートインストールを実行できます。これは10秒で完了できます。
(wget -O - pi.dk/3 || curl pi.dk/3/ || fetch -o - http://pi.dk/3) | bash
その他のインストールオプションについては、以下を参照してください。http://git.savannah.gnu.org/cgit/parallel.git/tree/README
詳細
より多くの例を見る:http://www.gnu.org/software/parallel/man.html
紹介ビデオを見る:https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1
このチュートリアルを見てください。http://www.gnu.org/software/parallel/parallel_tutorial.html
サポートを受けるには、メールリストに参加してください。https://lists.gnu.org/mailman/listinfo/parallel