23,107
社区成员
发帖
与我相关
我的任务
分享
#!/bin/bash
while true;do
iostat -xm -y 1 1
done
iostat -xm 1 |awk '{system("grep eth /proc/net/dev") ; getline;{print NR,"....",$0} }'
eth0: 1700140445 1660610 0 0 0 0 0 0 5506348304 3988929 0 0 0 0 0 0
eth1: 3224029 14901 0 0 0 0 0 0 21646376 85205 0 0 0 0 0 0
2 ....
eth0: 1700140445 1660610 0 0 0 0 0 0 5506348304 3988929 0 0 0 0 0 0
eth1: 3224029 14901 0 0 0 0 0 0 21646376 85205 0 0 0 0 0 0
4 .... 0.01 0.00 0.08 0.02 0.00 99.88
eth0: 1700140505 1660611 0 0 0 0 0 0 5506349180 3988931 0 0 0 0 0 0
eth1: 3224029 14901 0 0 0 0 0 0 21646376 85205 0 0 0 0 0 0
6 .... Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await svctm %util
eth0: 1700140505 1660611 0 0 0 0 0 0 5506349180 3988931 0 0 0 0 0 0
eth1: 3224029 14901 0 0 0 0 0 0 21646376 85205 0 0 0 0 0 0
8 .... sdb 0.01 0.00 0.06 0.00 0.02 0.00 769.15 0.00 0.46 0.18 0.00
eth0: 1700140565 1660612 0 0 0 0 0 0 5506350200 3988933 0 0 0 0 0 0
eth1: 3224029 14901 0 0 0 0 0 0 21646376 85205 0 0 0 0 0 0
10 .... avg-cpu: %user %nice %system %iowait %steal %idle
eth0: 1700140685 1660614 0 0 0 0 0 0 5506351002 3988936 0 0 0 0 0 0
eth1: 3224384 14903 0 0 0 0 0 0 21646474 85206 0 0 0 0 0 0
如果你想获取system(cmd)的结果,可以将它重定向到一个文件中,然后getline从文件中读取数据。
下面是我帮你改过后的,cmd | getline v1 。不知是否满足你的要求:
(iostat -xm 1 &>b.txt &);row_num=0;while true;do awk -v row_num="$row_num" '{ "grep eth /proc/net/dev" | getline;{print row_num,"....",$0} }';let row_num++;sleep 1;done <b.txt
1 .... sdb 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
1 ....
2 .... eth0: 1699917972 1658213 0 0 0 0 0 0 5499717100 3983049 0 0 0 0 0 0
2 .... eth1: 3070723 13925 0 0 0 0 0 0 21493056 84229 0 0 0 0 0 0
2 ....
2 .... Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await svctm %util
2 .... sda 0.00 0.00 0.00 1.00 0.00 0.00 8.00 0.00 4.00 4.00 0.40
2 .... sdb 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
2 ....
3 .... eth0: 1699918092 1658215 0 0 0 0 0 0 5499718206 3983052 0 0 0 0 0 0
3 .... eth1: 3071078 13927 0 0 0 0 0 0 21493411 84231 0 0 0 0 0 0
3 ....
3 .... Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await svctm %util
3 .... sda 0.00 0.00 0.00 1.00 0.00 0.00 8.00 0.00 2.00 2.00 0.20
3 .... sdb 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
3 ....
4 .... eth0: 1699918212 1658217 0 0 0 0 0 0 5499719312 3983055 0 0 0 0 0 0
4 .... eth1: 3071176 13928 0 0 0 0 0 0 21493509 84232 0 0 0 0 0 0
4 ....
4 .... Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await svctm %util
4 .... sda 0.00 6.00 0.00 4.00 0.00 0.04 20.00 0.00 1.00 1.00 0.40
4 .... sdb 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
4 ....
上面的代码并不完美,比如每次结束时都会留下一个iostat进程在继续执行,多次执行之后就有很多个iostat,这会导致b.txt文件不断增大,且影响awk的第一阶段输出。你可以修改修改,比如再iostat前加上killall iostat,或者trap捕获相关信号。