我正在使用gnu parallel命令监视少量Redis端点,然后在新端点上执行所有命令。
当前命令如下:
parallel --ungroup redis-cli -h {} monitor :::: old-server-list | cut -d "]" -f 2 | parallel --ungroup -k ./writter.sh {}
和writter.sh
parallel redis-cli -h {} $1 ::: redis-host-1 redis-host-2
但是我在旧端点与新端点上执行命令所需的时间不一致,导致与新Redis的连接一直关闭和打开。是否可以同时从stdin和file将参数传递给并行命令?将来自“new-server-list”的每个记录与相同的stdin输入合并以避免调用脚本?
就像是:
parallel ... | cut ... | parallel redis-cli -h {<line from new-server-list>} {<stdin from pipe>}
应该执行为:
redis-cli -h redis-host-1 stdin_output1
redis-cli -h redis-host-2 stdin_output1
redis-cli -h redis-host-1 stdin_output2
redis-cli -h redis-host-2 stdin_output2
最佳答案
您可以使用paste
并排粘贴两列,一列来自文件,另一列来自命令:
因此,请看以下内容:
seq 10
1
2
3
4
5
6
7
8
9
10
另一个名为
list.txt
的文件以另一种方式运行:10
9
8
7
6
5
4
3
2
1
现在,
paste
执行以下操作:paste list.txt <(seq 10)
10 1
9 2
8 3
7 4
6 5
5 6
4 7
3 8
2 9
1 10
您可以将其输入 GNU Parallel 中:
paste list.txt <(seq 10) | parallel -k --colsep '\t' echo {2} {1}
1 10
2 9
3 8
4 7
5 6
6 5
7 4
8 3
9 2
10 1
关于bash - Gnu并行合并来自stdin和文件的args,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52495082/