awk对于sed grep的优势在于分段,把分隔符分割成一小段一小段,针对段进行匹配,替换,操作,逻辑判断,比较...等
awk的基本操作
[root@wangshaojun ~]# awk -F ':' '{print $3}' 1.txt //// -F 指定分隔符 $3 就是第三段
0
1
2
3
.....
指定多个段
[root@wangshaojun ~]# awk -F ':' '{print $3,$4,$1}' 1.txt
0 0 root
1 1 bin
2 2 daemon
3 4 adm
4 7 lp
.....
指定显示指定的分隔符
[root@wangshaojun ~]# awk -F ":" 'OFS=":" {print $3,$4,$1}' 1.txt
0:0:root
1:1:bin
2:2:daemon
3:4:adm
......
匹配指定字符
[root@wangshaojun ~]# awk '/root/' 1.txt
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
匹配多个字符
[root@wangshaojun ~]# awk '/root|user/' 1.txt
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
saslauth:x:499:76:"Saslauthd user":/var/empty/saslauth:/sbin/nologin
带特殊字符的
[root@wangshaojun ~]# awk '/r*o/' 1.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
...
分段匹配
[root@wangshaojun ~]# awk -F':' '$1~/r*o/' 1.txt////以冒号为分隔符,搜索第一段含r*o的行
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
.....
分段匹配并只显示指定的行
[root@wangshaojun ~]# awk -F':' '$1~/r*o/ {print $3}' 1.txt ///显示第一段r*o的行的第三段
0
2
6
11
....
同时匹配两个关键词并现在指定行的指定段
[root@wangshaojun ~]# awk -F':' '$1~/r*o/ {print $1,$3}; $1~/user/ {print $1,$3}' 1.txt
[root@wangshaojun ~]# awk -F':' '$1~/r*o|user/ {print $1,$3}' 1.txt
root 0
daemon 2
shutdown 6
operator 11
.....
//////////////////////////////////////////////////////////////////////////////////////////
总结:awk -F 指定分割符 ‘:’ OFS=":"指定显示结果的分隔符 以段来匹配 ‘/r*o/’指定过滤条件 {print $3}显示过滤结果的第几段 指定文件
awk -F ‘:’ ‘$1~/r*o/’ 指定根据第几段来搜索 ~ 后面跟关键词
|可以合并搜索 ;可以分别搜索