「read」コマンドを使用して、シェルスクリプトに位置引数として行を渡します。

「read」コマンドを使用して、シェルスクリプトに位置引数として行を渡します。

次のファイルは実行されますが、何もしませんが、エラーは発生しません。

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並列スケジューリング

インストールする

ディストリビューションに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

関連情報