awk成长篇的几个例子

来源:互联网 发布:2016非农数据公布时间 编辑:程序博客网 时间:2024/05/20 09:06

实验环境:CentOS6.5自带的gawk

[root@localhost ~]# awk --version
GNU Awk 3.1.7

1.--re-interval支持匹配次数的扩展

[root@localhost ~]# echo 1234567 |awk  '/[0-9]{3,}/'
[root@localhost ~]#

[root@localhost ~]# echo 1234567 |awk  --re-interval '/[0-9]{3,}/'
1234567


2.有两个文件a.txt和b.txt,现在需求输出两个文件共有的行

[root@localhost ~]# cat a.txt
ab

123

cde

[root@localhost ~]#cat b.txt

ab

1234

cdefg

[root@localhost ~]# awk 'ARGIND==1{a[$0]}ARGIND==2&&($0 in a){print $0}'   a.txt  b.txt
ab

也可以是用下面这个:

[root@localhost ~]# awk 'NR==FNR{a[$0]}NR!=FNR&&($0 in a){print $0}' a.txt b.txt
ab

但是当ab在某个文件有两行的情况下,会有什么不同呢?

[root@localhost ~]# echo ab >>a.txt

[root@localhost ~]# awk 'NR==FNR{a[$0]}NR!=FNR&&($0 in a){print $0}' a.txt b.txt
ab

好像没啥事?不过你也可能想要这种情况,把这两个文件的顺序换一下

[root@localhost ~]# awk 'NR==FNR{a[$0]}NR!=FNR&&($0 in a){print $0}'  b.txt a.txt
ab
ab


3.通过substr进行小数四舍五入

substr简介substr(r,s,t) 返回字符串r中从第s位开始,长度为t的部分

[root@localhost ~]# echo 4.4 | awk -F. 'substr($2,0,1)>=5?a=$1+1:a=$1{print a}'
4

[root@localhost ~]# echo 4.5 | awk -F. 'substr($2,0,1)>=5?a=$1+1:a=$1{print a}'
5



0 0