AWK的用法(持續更新)

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章