技术改变生活

博客园 首页 新随笔 联系 订阅 管理

[root@a ~]# awk 'END{print NR}' c.txt       #没错,这就是文件的行数,当然,这种统计方法不是linux下最快的,但也是一种思路
3
[root@a ~]# wc -l c.txt         #这种统计方法是linux下最快的
3 c.txt

 

[root@a ~]# head -3 /etc/passwd

root:a:0:0:root:/root:/bin/bash
bin:b:1:1:bin:/bin:/sbin/nologin
daemon:c:2:2:daemon:/sbin:/sbin/nologin

[root@a ~]# head -3 /etc/passwd | awk -F':' '{print $1}'

root
bin
daemon
[root@a ~]# head -3 /etc/passwd | awk -F':' '{print $2}'

a
b
c
[root@a ~]#head -3 /etc/passwd | awk -F':' '{print $1}{print $2}'    
root
a
bin
b
daemon
c

#有两个print,可以看到第二列放到了第一列之后换行显示

 

[root@a ~]# head -3 /etc/passwd | awk -F':' '{print $1,"\n",$2}'    

root 
a
bin 
b
daemon 
c

#在print中将$1和$2之间加一个\n,第二列前的空白字符也被输出了,两者还是有所区别 

 

[root@a ~]# head -5 /etc/passwd | awk -F: '{if(NR>2&&NR<5)print NR,$0}'   
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin

 #awk条件语句,打印整行信息并显示打印行号,if语句位置在{ }中间

 

 

awk -F':' '$1~/root/'  1.txt

root:x:0:0:root:/root:/bin/bash

111root222:x:0:0:root:/root:/sbin/nologin

awk -F':' '$1~/root/{OFS="#";print $1,$2,$3}'  1.txt

root#x#0

111root222#x#0

awk -F':' '$1=="root"{print$1,$2,$3}'  1.txt

root x 0

awk -F':' '$1=="root" || NR>=30{print $1,$2}' 1.txt

root x

rpc x

111

awk -F':' 'NF>3&&NR<3{print $1,$2,$3}' 1.txt

root x 0

111root222 x 0

~为模糊匹配,==表示精确匹配

awk -F:  '$3>=1000&&NF=="/bin/bash"{print $1,$NF}'  /etc/passwd

#打印系统中能够正常登陆的普通用户

echo “one tow three four” |awk '{print $(NF-2)}'

two

#awk支持四则运算

awk ‘{print $2+20 >> "b.txt"}’  a.txt

#可以通过awk命令将结果重定向输出到b.txt文件

 

[root@a ~]# awk -F':' 'NF>3&&NR>16{print NR,"\t",$3,$5}'  /etc/passwd

17   89 
18   74 Privilege-separated SSH

打印符合条件的内容并显示行号,awk模式支持关系表达式

 

awk -F':'  '$1~”root“{print $0}' 1.txt

#OFS用于输出时指定字段分隔符,后跟“”接后续命令

 

awk -F':' '$1=="root"{print $1,$2}' 1.txt

awk -F':'  '$1=="root"||NR>=30{print $1,$2}' 1.txt

awk -F':'  'NF>3 &&NR<4{print $1,$2,$3}' 1.txt

#列数(NF)大于3列,行数(NR)小于4行

 

匹配

awk -F: '/root/{print}'  a.txt

awk -F: '/root/'  a.txt

awk -F: '/^root/'   a.txt

awk -F: '/bash$'  a.txt

 

 

 

 

其他语句

awk -F':' '{if($3<10){print "USER=>"$1}} a.txt

awk -F':'  '{printf "USERNAME:%-10s %15s\n",$1,$NF}' a.txt

 

 

 

 

 

 

 

实例:

1、过滤网卡的ip地址

注意:通过BEGIN{FS="[ :]+"}指定字段分隔符,其中BEGIN和END模块必需写在' '内部,如果是if条件表达式也必需写在' '中间,格式为'{if(条件){命令……}}‘

 2、指定字段加20重定向到新的文件

 

 awk通过变量查看文件行数

注意:a++等价于a=a+1,a++表示先赋值后加1。

 

posted on 2019-06-27 21:43  小阿峰  阅读(396)  评论(0编辑  收藏  举报