如何使用 shell 并行处理两个文件

如何使用 shell 并行处理两个文件

我想在这个例子中使用并行:

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

我有三个文件:codigos.txt一个包含 ids 的文件、dates.txt一个包含日期的文件以及cookies.txt一个包含执行请求所需的 cookie 的文件。

我想要做的是使用我的文件内容保存 mywebsite.com 对每个 url 的响应。

问题:

  1. 如何使用来自两个文件的信息?
  2. 网址在“&”处被剪切(即使我加了引号)。例子:

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

相关内容