方法比較笨,算是做一個總結,習慣用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