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