我有一个包含10个应用程序信息(app id,api密钥和密钥)的10行文件 apps.txt 。文件每行中的字段是与服务器交互的程序的参数。另一个文件 data.txt 包含作为程序输入的数据。我希望程序为apps.txt中的每一行启动一个实例,并将data.txt拆分为要处理的应用程序数。如何使用 GNU Parallel 来做到这一点? 我尝试了下面的命令,但无法获得所需的行为:
cat data.txt | parallel [-N1] -j10 --pipe --no-run-if-empty --line-buffer ./program.py {1} {2} {3} :::: apps.txt
apps.txt
AppID1 API_Key1 Secret_Key1
AppID2 API_Key2 Secret_Key2
...
AppID10 API_Key10 Secret_Key10
答案 0 :(得分:2)
我以你有10个工人的方式解释你的问题,并且你想要将stdin的块分发给那些人。
使用GNU Parallel的插槽替换字符串,并且有一个数组,索引是worker的信息。 Bash的数组从0开始计算索引,因此从slot()
中减去1。
# Set each entry in array 'worker' to one line from apps
parset worker echo :::: apps.txt
doit() {
workerid="$1"
echo "do stuff on ${worker[$workerid]}"
# Read stuff from stdin and do 'wc' on that
wc
}
# env_parallel is needed to get $worker exported
# -j10 must be the number of lines in apps.txt
cat data.txt | env_parallel -j10 --pipe doit '{= $_=slot()-1 =}'
答案 1 :(得分:0)
我真的不明白你对data.txt的看法。我只知道:
拆分文件
$ split -l 10 data.txt -d -a 4 split_file
此命令将根据行数(10)从data.txt生成{split_file000,split_file001,...}。
拆分并传递命令
$ cat app.txt | xargs -n 3 ./program.py
此命令等于:
$ ./program.py APPID1 APP_KEY1 SECRET_KEY1
$ ./program.py APPID2 APP_KEY2 SECRET_KEY2
$ ...