您的位置:首页 > 其它

awk工具

2018-03-13 15:35 411 查看

awk工具

命令:awk 
选项: 
-F 指定分隔符,如:-F ‘:’ 指定:号为分隔符awk截取文件的某个段(第一段):
[root@shuai-01 awk]# awk -F ':' '{print $1}' test.txt
root
bin
daemon
adm
lp
如果awk不指定分割符,他就会以空格为分隔符:
[root@shuai-01 awk]# awk '{print $1}' 1.txt
1
aa
dd

[root@shuai-01 awk]# cat 1.txt
1 2
aa bb
dd cc
匹配字符或者字符串:打印包含’oo’的行:
[root@shuai-01 awk]# awk '/oo/' test.txt
root:x:0:0:root:/root:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
打印第一段中有‘oo’的行:
[root@shuai-01 awk]# awk -F ':' '$1 ~/oo/' test.txt
root:x:0:0:root:/root:/bin/bash
将匹配’root’的行打印1,3段,匹配’user’打印全部:
[root@shuai-01 awk]# awk -F ':' '/root/ {print $1,$3} /user/ {print $0}' test.txt
root 0
operator 11
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
user1:x:1001:1001::/home/user1:/bin/bash
user2:x:1003:1005::/home/user5:/bin/bash
匹配包含“root”的或者包含“user”的:
[root@shuai-01 awk]# awk '/root|user/ {print $0}' test.txt
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
user1:x:1001:1001::/home/user1:/bin/bash
user2:x:1003:1005::/home/user5:/bin/bash
匹配第三段不是数字的(正则可用):
[root@shuai-01 awk]# awk -F ':' '$3 ~/[^0-9]/ {print $0}' test.txt
root:x:shuai:0:root:/root:/bin/bash
条件操作的(逻辑比较): 
第三段等于零的:
[root@shuai-01 awk]# awk -F ':' '$3==0 {print $0}' test.txt
root:x:0:0:root:/root:/bin/bash
第三段大于1000的第一列第三列:
[root@shuai-01 awk]# awk -F ':' '$3>1000 {print $1,$3}' test.txt
user1 1001
user2 1003
第七段为“/bin/bash” 的(==):
[root@shuai-01 awk]# awk -F ':' '$7=="/bin/bash" {print $0}' test.txt
root:x:0:0:root:/root:/bin/bash
shuai:x:1000:1000::/home/shuai:/bin/bash
user1:x:1001:1001::/home/user1:/bin/bash
user2:x:1003:1005::/home/user5:/bin/bash
第七段不是“/sbin/nologin”的(!=):
[root@shuai-01 awk]# awk -F ':' '$7!="/sbin/nologin" {print $0}' test.txt
root:x:shuai:0:root:/root:/bin/bash
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
shuai:x:1000:1000::/home/shuai:/bin/bash
user1:x:1001:1001::/home/user1:/bin/bash
user2:x:1003:1005::/home/user5:/bin/bash
第三段小于第四段($3<$4):
[root@shuai-01 awk]# awk -F ':' '$3<$4' test.txt
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
user2:x:1003:1005::/home/user5:/bin/bash
第三段大于5小于7($3>5 && $3<7):
[root@shuai-01 awk]# awk -F ':' '$3>5 && $3<7' test.txt
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
第三段大于1000或者第7段为“/bin/bash”:
[root@shuai-01 awk]# awk -F ':' '$3>1000 || $7=="/bin/bash"' test.txt
root:x:shuai:0:root:/root:/bin/bash
shuai:x:1000:1000::/home/shuai:/bin/bash
user1:x:1001:1001::/home/user1:/bin/bash
user2:x:1003:1005::/home/user5:/bin/bash
第三段大于1000的或者其他段包含”/bash” :
[root@shuai-01 awk]# awk -F ':' '$3>1000 || /bash/' test.txt
root:x:shuai:0:root:/root:/bin/bash
shuai:x:1000:1000::/home/shuai:/bin/bash
user1:x:1001:1001::/home/user1:/bin/bash
user2:x:1003:1005::/home/user5:/bin/bash
注意:匹配的时候是可以用正则的,但是条件操作(逻辑运算)不能用正则 
awk的内置变量: 
OFS :指定分割完之后的分割符{OFS=”#”} 
NR:表示行号 
NF :表示分割后有多少段分割完之后指定以#为分割符:
[root@shuai-01 awk]# awk -F ':' '{OFS="#"} {print $1,$2}' test.txt
root#x
bin#x
daemon#x
adm#x
第三段大于1000输出第1,2,3段:
[root@shuai-01 awk]# awk -F ':' '{OFS="#"} {if ($3>1000) {print$1,$2,$3}}' test.txt
root#x#shuai
user1#x#1001
user2#x#1003
显示行号:
[root@shuai-01 awk]# awk -F ':' '{print NR":"$0}' test.txt
1:root:x:shuai:0:root:/root:/bin/bash
2:bin:x:1:1:bin:/bin:/sbin/nologin
3:daemon:x:2:2:daemon:/sbin:/sbin/nologin
4:adm:x:3:4:adm:/var/adm:/sbin/nologin
5:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6:sync:x:5:0:sync:/sbin:/bin/sync
显示段数:
[root@shuai-01 awk]# awk -F ':' '{print NF":"$0}' test.txt
6:rootx:shuai:0:root:/root:/bin/bash
7:bin:x:1:1:bin:/bin:/sbin/nologin
7:daemon:x:2:2:daemon:/sbin:/sbin/nologin
7:adm:x:3:4:adm:/var/adm:/sbin/nologin
7:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
打印前五行:
[root@shuai-01 awk]# awk -F ':' 'NR<=5' test.txt
rootx:shuai:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
打印前十行中有root或者sync的行:
[root@shuai-01 awk]# awk -F ':' 'NR<=10 && /root|sync/' test.txt
rootx:shuai:0:root:/root:/bin/bash
sync:x:5:0:sync:/sbin:/bin/sync
operator:x:11:0:operator:/root:/sbin/nologin
将第一列全部赋值为root:
[root@shuai-01 awk]# head -n 3 test.txt |awk -F ':' '{OFS=":"} $1="root"'
root:shuai:0:root:/root:/bin/bash
root:x:1:1:bin:/bin:/sbin/nologin
root:x:2:2:daemon:/sbin:/sbin/nologin
将第三段全部加起来:
[root@shuai-01 awk]# awk -F ':' '{(tot=tot+$3)};END {print tot}' test.txt
6665
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: