linux awk
*注意: awk的表达式需要使用单引号''
awk NR NF
NR (number of row)表示行
NF (number of field) 表示列(默认值为最后一列)
先来看一个实例:
获取剩余内存空间大小
[root@rhel6 ~]# free -m total used free shared buffers cached Mem: 3828 791 3037 0 110 494 -/+ buffers/cache: 186 3642 Swap: 5999 0 5999 [root@rhel6 ~]# free -m | awk 'NR==3 {print $NF}' 3642
NF-5 == -6也就是倒数第四列
[root@rhel6 ~]# free -m total used free shared buffers cached Mem: 3828 791 3037 0 111 494 -/+ buffers/cache: 186 3642 Swap: 5999 0 5999 [root@rhel6 ~]# free -m | awk 'NR==2 {print $(NF-5)}' 3828
awk -F
格式:-F'[:#/@¥$%]' 可以定义多个分隔符, 支持正则表达式 -F '[ :]+' 使用空格和:分割,+表示可以有连续的空格或:
用法:awk -F"[@/t]" '{print $1,$2,$3}' <test
以@,Tab键分割test文件的每一行,并输出第一、二、三列。
案例: 获取每个分区的Use空间
[root@rhel6 script]# df -Ph Filesystem Size Used Avail Use% Mounted on /dev/mapper/VG01-lv_root 3.8G 510M 3.1G 14% / tmpfs 1.9G 0 1.9G 0% /dev/shm /dev/sda1 477M 88M 364M 20% /boot /dev/mapper/VG01-lv_home 1.9G 3.7M 1.8G 1% /home /dev/mapper/VG01-lv_opt 1.9G 139M 1.7G 8% /opt /dev/mapper/VG01-lv_tmp 3.8G 7.9M 3.6G 1% /tmp /dev/mapper/VG01-lv_usr 4.7G 2.0G 2.6G 44% /usr /dev/mapper/VG01-lv_var 4.7G 509M 4.0G 12% /var [root@rhel6 script]# df -h | awk 'NR==3 {print $(NF-1)}' | awk -F '[%]' '{print $1}' 14 [root@rhel6 script]#
过滤出mysql端口
[root@rhel6 script]# netstat -lntup | grep 3306 | awk -F "[ :]+" '{print $5}' 3306 [root@rhel6 script]# netstat -lntup | grep 3306 tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 16463/mysqld [root@rhel6 script]#
awk过滤
通过 /xxx|xxx|xxx/ 来进行过滤
[root@rhel6 script]# df -hP | awk -F '%' '/usr|tmp|var/{print $1}' tmpfs 1.9G 0 1.9G 0 /dev/mapper/VG01-lv_tmp 3.8G 81M 3.6G 3 /dev/mapper/VG01-lv_usr 4.7G 2.0G 2.5G 44 /dev/mapper/VG01-lv_var 4.7G 573M 3.9G 13 [root@rhel6 script]# df -hP | awk -F '%' '/usr|tmp|var/{print $2}' /dev/shm /tmp /usr /var [root@rhel6 script]#