因为最近在写脚本处理文件,当文件数小的时候,没有感觉太多,但当数量成几何增长,发现处理速度真的跟不上。
脚本执行过程都是串行,一个过程结束接下一个过程,但当一直重复同一个循环过程,是否可以并行循环?百度了一下果然大神多多,厉害了我的哥!因为当时手机浏览的,貌似是在知乎上看到的,这里记录一下。
2个核心点:
(cmd)&:后台运行
wait:等待所有进程结束后再退出
直接贴个代码
脚本功能:ping局域网的存活主机
#!/bin/bash
for ip in 192.168.68.{1..254}
do
(
ping -c 4 $ip >/dev/null
if [ $? -eq 0 ];then
echo "$ip online"
fi
)&
done
wait
下面这个稍微做了延伸,根据更加cpu内核数量来并发数量,因为有的时候处理的文件太过庞大,可以加以限制。
FILEPATH=/tmp/1.txt
echo 192.168.68.{1..254} |xargs -n1 > $FILEPATH
LineNUM=`wc -l $FILEPATH|awk '{print $1}'`
CoreNUM=`lscpu|grep "^CPU(s"|awk '{print $NF}'`
TaskNUM=$((LineNUM/CoreNUM+1))
NNN=1
for i in `seq $CoreNUM`
do
sed -n "$NNN,+$((TaskNUM-1))"p $FILEPATH >${FILEPATH}_$i
NNN=$((TaskNUM+1))
done
for ip in `cat ${FILEPATH}_*`
do
(
ping -c 2 $ip >/dev/null
if [ $? -eq 0 ];then
echo "$ip online"
fi
)&
done
wait
发表评论