【命令名称】 awk
【使用权限】 所有人
【语法】
                      awk  -F ‘[分隔符]+’ ‘条件类型{动作}’   filename
【功能说明】
                      把一行分成数个栏进行处理
【常用参数】
      -F            后面跟分隔符,可以加多个,默认为空格 取代FS
      NR              目前处理第几行
      NF              每一行拥有的列总数
【实例】
先显示文件的内容:
[cxc@cxcserver ~]$ cat cxc.txt                          
15:30   cxc  
15:31   myx
15:37   czq
15:50   zcy
17:50   zn
10:32   aaa
10:59   bbb
 
1.默认以空格进行分格符:
[cxc@cxcserver ~]$ awk '{print $1}' cxc.txt        
15:30
15:31
15:37
15:50
17:50
10:32
10:59
 
2.以空格和冒号为分格符:
[cxc@cxcserver ~]$ awk -F '[ :]+' '{print $1 "\t" $2 "\t" $3}' cxc.txt        
15      30      cxc
15      31      myx
15      37      czq
15      50      zcy
17      50      zn
10      32      aaa
10      59      bbb
 
3.显示出包含cxc字符的行
[cxc@cxcserver ~]$ awk '/cxc/' cxc.txt                  
15:30   cxc
 
4.取范围,非常有用,分析日志可以用
[cxc@cxcserver ~]$ awk '/15:30/,/17:50/' cxc.txt       #取范围内容,这条很有用,
15:30   cxc  
15:31   myx
15:37   czq
15:50   zcy
17:50   zn
 
5.以空格分隔后,取出第二列为cxc的行,cxc必须用双引号
[cxc@cxcserver ~]$ awk '$2=="cxc"' cxc.txt                                            
15:30   cxc 
 
6.以空格冒号为分隔后,第一列为15的行
[cxc@cxcserver ~]$ awk -F '[ :]+' '$1==15' cxc.txt   
15:30   cxc  
15:31   myx
15:37   czq
15:50   zcy
 
7.特殊用法,必须掌握
[cxc@cxcserver ~]$ awk '{++count;} END {print count}' cxc.txt 
 8
 
8.打印最后一列
[cxc@cxcserver ~]$ awk '{print $NF}' cxc.txt          
cxc
myx
czq
zcy
zn
aaa
bbb
 
9. 打印倒数第二例
[cxc@cxcserver ~]$ awk '{print $(NF-1)}' cxc.txt             
15:30
15:31
15:37
15:50
17:50
10:32
10:59
19:23
 
列出cxx.txt内容
[cxc@cxcserver ~]$ [cxc@cxcserver ~]$ cat cxx.txt      
a            1
b            2
c            3
d            4
 
10. 计算第二列的和
[cxc@cxcserver ~]$ awk 'BEGIN{sum=0} {sum+=$NF} END{print sum}' cxx.txt   
10
 
11.取出IP地址
[cxc@cxcserver ~]$ ifconfig eth0 |awk -F '[: ]+' 'NR==2 {print $4}'   
192.168.20.242
 
12.分别计算passwdj里最后shell种类个数
[cxc@cxcserver ~]$ cat /etc/passwd|awk -F ':''{print$NF}'|sort|uniq                                                         
  3 /bin/bash
  1 /bin/sync
  1 /sbin/halt
 18 /sbin/nologin
  1 /sbin/shutdown    
 
13.另一种计算方法,十分有用 end要大写                                       
 [cxc@cxcserver ~]$ cat /etc/passwd|awk -F ':' '{++state[$NF]} END {for (a in state) print a "\t" state[a]}'
 /sbin/shutdown 1
/bin/bash       3
/sbin/nologin   18
/sbin/halt      1
/bin/sync       1
 
14.统计netstat各连接数
[cxc@cxcserver ~]$netstat -n | awk '/^tcp/ {++state[$NF]} END {for(key in state) print key,"\t",state[key]}'
LAST_ACK         1                                        SYN_RECV         14
ESTABLISHED      79
FIN_WAIT1        28
FIN_WAIT2        3
CLOSING          5
TIME_WAIT        1669