实验环境: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