方法比较笨,算是做一个总结,习惯用AWK进行取值,下面以free -m为例来举例
!!!持续更新,看到的网友也可以留言的形式来一起更新内容,谢谢
例子:
[root@130 ~]# free -m total used free shared buffers cached Mem: 1861 174 1687 0 8 50 -/+ buffers/cache: 115 1746 Swap: 8191 0 8191
1、取值
[root@130 ~]# free -m|awk 'NR==2 {print $2}' 1861
-F 可以指定分隔符
NR==2 取第二行
print $2 打印第二个
例子:
[root@localhost ~]# ifconfig eth0 eth0 Link encap:Ethernet HWaddr 00:0C:29:E8:7D:7E inet addr:192.168.222.128 Bcast:192.168.222.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fee8:7d7e/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:1565 errors:0 dropped:0 overruns:0 frame:0 TX packets:1148 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:152246 (148.6 KiB) TX bytes:266621 (260.3 KiB)
2、取IP
ifconfig eth0|awk -F '[ :]' 'NR==2 {print $13}' 192.168.222.128 ifconfig eth0|awk -F '[ :]+' 'NR==2 {print $13}' 192.168.222.128 echo ...1,,,,2|awk -F '[.,]+' '{print $2}' 1 echo ...1,,,,2|awk -F '[.,]+' '{print $3}' 2 ip a|grep -E "eth|eno"|awk -F '[ /]+' 'NR==3 {print $3}' ##grep -E 同时筛选两个字符
-F 指定分隔符[]里指定要匹配的分隔符
不含“+” 意味着inet前面的N个字符,要仔细计算很麻烦
含“+”就将连续的空格当做一个整体
3、计算(参考内存信息)
[root@130 ~]# free -m|awk 'NR==2 {print int(""$3+$2"")}' 2035 [root@130 ~]# free -m|awk 'NR==2 {print int(""$3/$2*100"")}' 9 [root@130 ~]#
int 取整
[root@localhost ~]# df -m Filesystem 1M-blocks Used Available Use% Mounted on /dev/mapper/VolGroup-lv_root 45963 2361 41268 6% / tmpfs 931 0 931 0% /dev/shm /dev/sda1 485 39 421 9% /boot 加减法: df -m|awk -F '[ ]+' '{if(NR==2) a=$3;if(NR==3) b=$3;if(NR==4) c=$3} END{printf ("%.0fM\n",a+b+c)}' ##分别取2/3/4行的第3列,设置变量为$1-$3,END结束进行结果计算。a+b+c进行取值 "%.0fM\n" 0保留0位小数/M为兆单位\n表示换行 乘除法: df -m|awk -F '[ ]+' '{if(NR==2) a=$3;if(NR==3) b=$3;if(NR==4) c=$3} END{printf ("%.0fM\n",(a+b)/c)}' 61M
很多参数的这里没有写,可以参考 http://www.cnblogs.com/xudong-bupt/p/3721210.html