シェルを使用して2つのファイルを並列に処理する方法

シェルを使用して2つのファイルを並列に処理する方法

この例では、並列性を使用したいと思います。

cat codigos.txt | parallel -j 10 "wget http://mywebsite.com/teste?id={}&x=&date=01/01/2017" --load-cookies=cookies.txt

3つのファイルがあります。codigos.txtIDを含むファイル、dates.txt日付を含むファイル、cookies.txt要求を実行するために必要なCookieを含むファイル。

私が望むのは、私のファイルの内容を使用して、各URLに対するmywebsite.comの応答を保存することです。

質問:

  1. 両方のファイルの情報を使用するには?
  2. URLは「&」部分で切り捨てられます(引用符を追加したにもかかわらず)。例:

request made to http://mywebsite.com/teste?id=1

この例に示すように(ただし、「&」のためにスペースや切り取りを配置しない):

cat abc-file | parallel -a - -a def-file echo

引用:https://www.gnu.org/software/parallel/parallel_tutorial.html

答え1

私はあなたが実行したいと仮定します:

wget http://mywebsite.com/teste?id=codigo1&x=&date=01/01/2017" --load-cookies=cookies.txt
wget http://mywebsite.com/teste?id=codigo1&x=&date=02/01/2017" --load-cookies=cookies.txt
wget http://mywebsite.com/teste?id=codigo1&x=&date=03/01/2017" --load-cookies=cookies.txt
wget http://mywebsite.com/teste?id=codigo2&x=&date=01/01/2017" --load-cookies=cookies.txt
wget http://mywebsite.com/teste?id=codigo2&x=&date=02/01/2017" --load-cookies=cookies.txt
wget http://mywebsite.com/teste?id=codigo2&x=&date=03/01/2017" --load-cookies=cookies.txt

ファイルに以下がcodigos.txt含まれている場合:

codigo1
codigo2

以下dates.txtを含みます。

01/01/2017
02/01/2017
03/01/2017

これでこれが機能します。

mywget() {
    wget "http://mywebsite.com/teste?id=$1&x=&date=$2" --load-cookies=cookies.txt;
}
export -f mywget
parallel mywget :::: codigos.txt dates.txt

関連情報