awk

2019-09-29  本文已影响0人  DB哥

Linux System Environment

[root@commond ~]# cat /etc/redhat-release 
CentOS Linux release 7.5.1804 (Core)                        #==》系统版本
[root@commond ~]# uname -r
3.10.0-862.el7.x86_64                                       #==》内核版本
[root@commond ~]# uname -m
x86_64                                                     #==》系统架构
[root@commond ~]# echo $LANG
en_US.UTF-8                                                #==》系统字符集
[root@commond ~]# awk - -version
GNU Awk 4.0.2                                              #==》awk版本

awk功能

1、对数据扫描并进行分析处理
2、截取列

awk格式

awk  '{}'  filename
awk  'BGEIN{}  {}  END{}'

awk 参数

1、-F        #==》指定分隔符
2、NR            #==》显示行号
3、NF            #==》浏览记录域的个数
4、$NF           #==》打印最后一列
4、$0            #==》打印所有
3、$1            #==》显示第一列,$2显示第二列,以此类推

一、awk截取列

[root@commond ~]# tail -2 /etc/passwd | awk -F "[:]+" '{print $1}'
oldboy
user01

二、显示列的个数

[root@commond ~]# tail -2 /etc/passwd | awk -F "[:]+" '{print $0}'
oldboy:x:1000:1000:oldboy:/home/oldboy:/bin/bash
user01:x:1001:1001::/home/user01:/bin/bash
[root@commond ~]# tail -2 /etc/passwd | awk -F "[:]+" '{print NF}'
7
6

三、打印以d开头或以01结尾的字符串

[root@commond ~]# ls -l /mnt/ | awk '/^d/'
drwxr-xr-x 2 root root     89 Jun 18 11:44 backup01
[root@commond ~]# ls -l /mnt/ | awk '/01$/'
drwxr-xr-x 2 root root     89 Jun 18 11:44 backup01

四、打印倒数的列

[root@commond tmp]# tail -2 /etc/passwd | awk -F "[:]+" '{print $NF}'
/bin/bash
/bin/bash
[root@commond ~]# tail -2 /etc/passwd | awk -F "[:]+" '{print $(NF-1)}'
/home/oldboy
/home/user01

五、获取第1行到第5行的列

[root@commond ~]# awk -F "[:]+" 'NR>=1 && NR<=5 {print NR,$1,"|",$2}' /etc/passwd
1 root | x
2 bin | x
3 daemon | x
4 adm | x
5 lp | x

六、截取第1行和第3行的列

[root@commond ~]# awk -F "[:]+" 'NR==1 || NR==3 {print NR,$1,"|",$2}' /etc/passwd
1 root | x
3 daemon | x

七、添加BEGIN和END

[root@commond ~]# cat /etc/passwd | awk -F : 'BEGIN{print "name,shell"} NR>=1 && NR<=3{print $1,$NF} END{print "end"}' 
name,shell
root /bin/bash
bin /sbin/nologin
daemon /sbin/nologin
end

八、统计网络连接状态

[root@commond ~]# ss -a | awk -F "[ ]+" '{print $2}' | sort -n | uniq -c
     88 ESTAB
     33 LISTEN
      1 State
     56 UNCONN
[root@commond ~]# ss -an | awk '{S[$2]++} END{for(a in S) {print S[a],a}}'
33 LISTEN
88 ESTAB
1 State
56 UNCONN

九、统计文本行数

[root@commond ~]# awk '{count++;} END{print count}' /etc/passwd
22
上一篇下一篇

猜你喜欢

热点阅读