Linux centos7 awk工具

一、awk介绍

awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk含盖sed所有功能,把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。

二、awk上

 1.截取文档中的某个片段

[root@davery ~]# mkdir awk                               先创建一个awk
[root@davery ~]# cp /etc/passwd awk/0.txt
[root@davery ~]#
[root@davery ~]# cd awk

[root@davery awk]# head -n3 0.txt        显示前3行
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@davery awk]#

[root@davery awk]# head -n3 0.txt |awk -F ':' '{print $0}'   $0比较特殊为截取整行或者

awk '{print $0}' 0.txt 无须指定分隔符

root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@davery awk]#

[root@davery awk]# head -n3 0.txt |awk -F ':' '{print $1}'     把0.txt前3行,第1个字段($1)显示出来
root
bin
daemon
[root@davery awk]#

[root@davery awk]# head -n3 0.txt |awk -F ':' '{print $2}' 把0.txt前3行,第2个字段($2)显示出来
x
x
x
[root@davery awk]# head -n3 0.txt |awk -F ':' '{print $3}' 把0.txt前3行,第3个字段($3)显示出来
0
1
2
[root@davery awk]# head -n2 0.txt |awk -F ':' '{print $6}' 把0.txt前2行,第6个字段($6)显示出来
/root
/bin
[root@davery awk]#

[root@davery awk]# head -n3 0.txt |awk -F ':' '{print $1"#"$2"#"$3"#"}'  可以自定义格式'{print $1"#"$2"#"$3"#"}'
root#x#0#
bin#x#1#
daemon#x#2#
[root@davery awk]#

[root@davery awk]# head -n3 0.txt |awk -F ':' '{print $1,$2,$3}'  把0.txt前3行,第1,2,3个字段($1,$2,$3)显示出来
root x 0
bin x 1
daemon x 2
[root@davery awk]#

2.匹配字符或者字符串(查找并显示)

[root@davery awk]# awk '/ro/' 0.txt 显示第一段含有ro的所有行
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
[root@davery awk]# awk -F ':' '$1 ~/oo/' 0.txt    ~代表匹配的意思,把0.txt里面第1个字段($1)含有oo的都显示出来
root:x:0:0:root:/root:/bin/bash
[root@davery awk]# awk -F ':' '$1 ~/ot/' 0.txt
root:x:0:0:root:/root:/bin/bash
[root@davery awk]# awk -F ':' '$1 ~/root/' 0.txt
root:x:0:0:root:/root:/bin/bash
[root@davery awk]#

[root@davery awk]# awk -F ':' '/root/ {print $1,$3} /test/ {print $1.$3}' 0.txt 匹配完root,然后再匹配test,支持多个表达式一起
root 0
operator 11
[root@davery awk]#

3.数学操作,==等于,>、>=、<、<=、!=

[root@davery awk]#awk -F ‘:’ '$3="0"' 0.txt

[root@davery awk]#awk -F ‘:’ '$3>="500"' 0.txt 加“”针对字符串

[root@davery awk]#awk -F ‘:’ '$3>=500' 0.txt  针对数字不需要“”

[root@davery awk]#awk -F ‘:’ '$7!="/sbin/nologin"' 0.txt

[root@davery awk]#awk -F ‘:’ '$3>$4' 0.txt  

[root@davery awk]#awk -F ‘:’ '$3>$4 && $3<"7" '0.txt 

[root@davery awk]#awk -F ‘:’ '$3>1000 || $7=="/bin/bash" 0.txt 

二、awk下

awk内置变量,常用变量有OFS、NF、NR、-F 功能类似,用来定义分割符,作为输出时NF表示使用分隔符分隔后一共有多少段,NR表示行号。

[root@davery awk]#head -5 /etc/passwd |awk -F ':'  '{OFS="#"} {print $1,$3,$4}'

[root@davery awk]# head -5 /etc/passwd |awk -F ':' '{OFS="#"} {print $1,$3,$4}'
root#0#0
bin#1#1
daemon#2#2
adm#3#4
lp#4#7
[root@davery awk]#

[root@davery awk]#awk -F ':' '{OFS="#"} {if ($3>1000) {printf $1,$2,$3,$4}}' 0.txt

uaer1user2user3user4user6[root@davery awk]#

[root@davery awk]# head -n3 /etc/passwd |awk -F ':' '{print NF}'
7
7
7
[root@davery awk]#

[root@davery awk]# head -n3 /etc/passwd |awk -F ':' '{print NR}'
1
2
3
[root@davery awk]#

[root@davery awk]#awk 'NR>40' 0.txt

[root@davery awk]#awk -F ':' 'NR<20 && $1 ~/root/' 0.txt

root:x:0:0:root:/root:/bin/bash

[root@davery awk]#head -n 3 /etc/passwd |awk -F ':' '$1="root"' 

root x 0 0 root /root /bin/bash
root x 1 1 bin /bin /sbin/nologin
root x 2 2 daemon /sbin /sbin/nologin
[root@davery awk]#

[root@davery awk]#awk -F ':'  '{(tot=tot+$3)}; END {print tot}' 0.txt

[root@davery awk]# awk -F ':' '{(tot=tot+$3)}; END {print tot}' 0.txt
8629
[root@davery awk]#

[root@davery awk]# awk -F ':' '{if($1=="root") {print $0}}' 0.txt
root:x:0:0:root:/root:/bin/bash
[root@davery awk]#

猜你喜欢

转载自www.cnblogs.com/davery/p/8734971.html