运行 同时文件的所有行
Run all lines of a file at the same time
while 循环工作正常。
但想知道是否有一种方法可以同时 运行 从一个文件中获取所有行,然后通过同一组命令 运行 变量而不是等待每个接口等待 3秒 ?
while read line; do
before=$(snmpwalk -v2c -c public 1.1.1.1 .1.3.6.1.2.1.2.2.1.16.$line | awk '{print }')
sleep 3
after=$(snmpwalk -v2c -c public 1.1.1.1 .1.3.6.1.2.1.2.2.1.16.$line | awk '{print }')
res=$(bc <<< "$after-$before")
zxc=$(echo "$res * 8 * 100 / (1000000000 * 3) " | bc)
per=$(echo "scale=1; 100 * $zxc / (1000) " | bc)
done < intfile.txt
谢谢
可以使用GNU's parallel
将命令移动到单独的文件command.sh:
before=$(snmpwalk -v2c -c public 1.1.1.1 .1.3.6.1.2.1.2.2.1.16. | awk '{print }')
sleep 3
after=$(snmpwalk -v2c -c public 1.1.1.1 .1.3.6.1.2.1.2.2.1.16. | awk '{print }')
res=$(bc <<< "$after-$before")
zxc=$(echo "$res * 8 * 100 / (1000000000 * 3) " | bc)
per=$(echo "scale=1; 100 * $zxc / (1000) " | bc)
然后以intfile.txt作为输入执行并行:
cat intfile.txt | parallel -j 5 'bash command.sh {}'
- :j 标志设置有多少作业将 运行 同时
根据@Gonzalo 的回答,您可以使用 bash 函数将 command.sh
移动到同一脚本中:
walk_one() {
do_the_walk() {
snmpwalk -v2c -c public 1.1.1.1 .1.3.6.1.2.1.2.2.1.16. |
awk '{print }'
}
before=$(do_the_walk )
sleep 3
after=$(do_the_walk )
res=$(bc <<< "$after-$before")
zxc=$(echo "$res * 8 * 100 / (1000000000 * 3) " | bc)
per=$(echo "scale=1; 100 * $zxc / (1000) " | bc)
}
export -f walk_one
cat intfile.txt | parallel -j 5 walk_one {}
while 循环工作正常。
但想知道是否有一种方法可以同时 运行 从一个文件中获取所有行,然后通过同一组命令 运行 变量而不是等待每个接口等待 3秒 ?
while read line; do
before=$(snmpwalk -v2c -c public 1.1.1.1 .1.3.6.1.2.1.2.2.1.16.$line | awk '{print }')
sleep 3
after=$(snmpwalk -v2c -c public 1.1.1.1 .1.3.6.1.2.1.2.2.1.16.$line | awk '{print }')
res=$(bc <<< "$after-$before")
zxc=$(echo "$res * 8 * 100 / (1000000000 * 3) " | bc)
per=$(echo "scale=1; 100 * $zxc / (1000) " | bc)
done < intfile.txt
谢谢
可以使用GNU's parallel
将命令移动到单独的文件command.sh:
before=$(snmpwalk -v2c -c public 1.1.1.1 .1.3.6.1.2.1.2.2.1.16. | awk '{print }')
sleep 3
after=$(snmpwalk -v2c -c public 1.1.1.1 .1.3.6.1.2.1.2.2.1.16. | awk '{print }')
res=$(bc <<< "$after-$before")
zxc=$(echo "$res * 8 * 100 / (1000000000 * 3) " | bc)
per=$(echo "scale=1; 100 * $zxc / (1000) " | bc)
然后以intfile.txt作为输入执行并行:
cat intfile.txt | parallel -j 5 'bash command.sh {}'
- :j 标志设置有多少作业将 运行 同时
根据@Gonzalo 的回答,您可以使用 bash 函数将 command.sh
移动到同一脚本中:
walk_one() {
do_the_walk() {
snmpwalk -v2c -c public 1.1.1.1 .1.3.6.1.2.1.2.2.1.16. |
awk '{print }'
}
before=$(do_the_walk )
sleep 3
after=$(do_the_walk )
res=$(bc <<< "$after-$before")
zxc=$(echo "$res * 8 * 100 / (1000000000 * 3) " | bc)
per=$(echo "scale=1; 100 * $zxc / (1000) " | bc)
}
export -f walk_one
cat intfile.txt | parallel -j 5 walk_one {}