博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
awk工具
阅读量:6276 次
发布时间:2019-06-22

本文共 3275 字,大约阅读时间需要 10 分钟。

awk工具

作用:针对文档中的行进行操作,截取功能;针对文档中的行来操作,一行一行的执行;

打印文件

awk '{print $0}' test.txt

截取文档中的某个段

head -n2 passwd.txt | awk -F ':' '{print $1}'
显示passwd.txt 2行 | 截取以:为分隔符的前面1段
-F作用是指定分隔符,默认为空格或者tab;
$1 为第一段 $2为第二段 $0为全部

[root@shu-test sed]# head -n2 test.txtroot:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologin[root@shu-test sed]# head -n2 test.txt |awk -F ':' '{print $1}'rootbin[root@shu-test sed]#[root@shu-test sed]# head -n2 test.txt |awk -F ':' '{print $1,$2,$3}'root x 0bin x 1[root@shu-test sed]#

匹配字符或字符串

awk '/oo/' test.txt

匹配test.txt中字符oo

[root@shu-test sed]# awk '/oo/' test.txtroot:x:0:0:root:/root:/bin/bashlp:x:4:7:lp:/var/spool/lpd:/sbin/nologinmail:x:8:12:mail:/var/spool/mail:/sbin/nologinoperator:x:11:0:operator:/root:/sbin/nologinpostfix:x:89:89::/var/spool/postfix:/sbin/nologin[root@shu-test sed]#

awk -F ':' '$1 ~/oo/' test.txt

匹配test.txt中第一段中带有oo的;中间~为匹配意思

[root@shu-test sed]# awk -F ':' '$1~/oo/' test.txtroot:x:0:0:root:/root:/bin/bash[root@shu-test sed]#

awk -F ':' '/root/ {print $1,$3} /user/ {print $1,$3}' test.txt

匹配带有root的行 并打印此行第一段与第三段,并再匹配user,打印第一段与第三段;

[root@shu-test sed]# awk -F ':' '/root/ {print $1,$3} /user/ {print $1,$3}' test.txtroot 0operator 11user01 1000user02 1001user005 1008user007 1007[root@shu-test sed]#

条件操作符

(== 、> 、>= 、< 、<= 、!=)并且 或者(&& ||)

awk -F ':' '$3=="0"' test.txt
将test.txt中意:为分隔符的第三段‘等于’0的行打印出来,双引号为字符串,不加双引号为数字;

[root@shu-test sed]# awk -F ':' '$3=="0"' test.txtroot:x:0:0:root:/root:/bin/bash[root@shu-test sed]# awk -F ':' '$3=="1008"' test.txtuser005:x:1008:1005::/home/user005:/bin/bash[root@shu-test sed]#[root@shu-test sed]# awk -F ':' '$3>=1000 {print $1}' test.txtuser01user02user005user007

awk的内置变量

-F 定义分隔符,OFS输出时定义一个分隔符,NF表示用分隔符分隔后一共有多少段,NR表示行号,NF段;

head -5 test.txt |awk -F ':' '{OFS="#"} {print $1,$3,$4}'

打印前5行中以分隔符:为定义的第134段,并在输出的134段中加上分隔符#

[root@shu-test sed]# head -5 test.txt |awk -F ':' '{OFS="#"} {print $1,$3,$4}'root#0#0bin#1#1daemon#2#2adm#3#4lp#4#7[root@shu-test sed]#

awk -F ':' '{OFS="#"} {if($3>500){print $1,$2,$3,$4}}' test.txt

增加判断语句如果第三段大于500才会输出1 2 3 4 段

[root@shu-test sed]# awk -F ':' '{OFS="#"} {if($3>500){print $1,$2,$3,$4}}' test.txtpolkitd#x#999#997chrony#x#998#996user01#x#1000#1000user02#x#1001#1001user005#x#1008#1005user007#x#1007#1005[root@shu-test sed]#

以行号显示

[root@shu-test sed]# head -5 test.txt|awk -F ':' '{print NR":"$0}'1:root:x:0:0:root:/root:/bin/bash2:bin:x:1:1:bin:/bin:/sbin/nologin3:daemon:x:2:2:daemon:/sbin:/sbin/nologin4:adm:x:3:4:adm:/var/adm:/sbin/nologin5:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin[root@shu-test sed]#

打印前十行

[root@shu-test sed]# awk -F ':' 'NR<=10' test.txtroot:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinadm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologinsync:x:5:0:sync:/sbin:/bin/syncshutdown:x:6:0:shutdown:/sbin:/sbin/shutdownhalt:x:7:0:halt:/sbin:/sbin/haltmail:x:8:12:mail:/var/spool/mail:/sbin/nologinoperator:x:11:0:operator:/root:/sbin/nologin[root@shu-test sed]#

awk中的数学运算

head -n2 test.txt |awk -F ':' '{$7=$3+$4;print $0}'

第七段=第三段+第四段的 将所在行输出
0=0+0 2=1+1

[root@shu-test sed]# head -n2 test.txt |awk -F ':' '{$7=$3+$4;print $0}'root x 0 0 root /root 0bin x 1 1 bin /bin 2[root@shu-test sed]#

转载于:https://blog.51cto.com/shuzonglu/2062289

你可能感兴趣的文章
运维基础命令
查看>>
Linux下的lds链接脚本简介(二)
查看>>
入门到进阶React
查看>>
C++每日练笔之日期类(基类)
查看>>
SVN 命令笔记
查看>>
修复Postfix 的Relay access denied问题
查看>>
检验手机号码
查看>>
重叠(Overlapped)IO模型
查看>>
ffmpeg study 1
查看>>
Git使用教程
查看>>
使用shell脚本自动监控后台进程,并能自动重启
查看>>
Flex&Bison手册
查看>>
MySQL 5.6 for Windows 解压缩版配置安装
查看>>
solrCloud+tomcat+zookeeper集群配置
查看>>
/etc/fstab,/etc/mtab,和 /proc/mounts
查看>>
Apache kafka 简介
查看>>
socket通信Demo
查看>>
技术人员的焦虑
查看>>
js 判断整数
查看>>
建设网站应该考虑哪些因素
查看>>