56. AWK工作原理概览

sed:修改文件

awk:统计

打印/etc/hosts文件的第一列
[root@localhost ~]# awk '{print $1}' /etc/hosts
127.0.0.1
::1

awk默认按照空格或tab键分割,如果指定以冒号分割,则用-F指定
[root@localhost ~]# awk -F ":" '{print $1}' /etc/passwd

上面语句打印了三个ok,是因为/etc/hosts里面有三行内容。行处理了三行

END语句:行处理之后的收尾工作

BEGIN发生在读文件前,awk语句后面即使没有跟文件,BEGIN也可执行。
[root@localhost ~]# awk 'BEGIN{print 2/5}'
0.4

END发生在行处理之后

在行处理前,先修改字段分隔符
[root@localhost ~]# awk 'BEGIN{FS=":"}{print $1}' /etc/passwd

一个等号表示赋值,2个等号表示匹配

OFS:指定输出以什么方式分割
[root@localhost ~]# awk 'BEGIN{FS=":";OFS="---"}{print $1,$2}' /etc/passwd
root---x
bin---x
daemon---x

(1)pattern类似正则,awk 'pattern' filename
awk '/root/' passwd
匹配到/root/,然后输出

打印每一行的第一个字段
[root@localhost ~]# awk -F":" '{print $1}' /etc/passwd
root
bin

只打印满足条件的行,即包含/root/的行的第一列
[root@localhost ~]# awk -F":" '/root/{print $1}' /etc/passwd
root
operator

只打印满足条件的行,即包含/root/的行的第一列,异地第三列(UID)
[root@localhost ~]# awk -F":" '/root/{print $1,$3}' /etc/passwd 
root 0
operator 11


(2)行处理:awk '{action}' filename
awk -F: '{print $1}' passwd

(3)awk 'pattern {action}' filename
awk 'BEGIN{FS=":"} /root/{print $1 $2}' /etc/passwd

(4)command|awk 'pattern {action}'
df - P|grep '/'|awk '$4>23000 {print $4}'
-P:表示posix,逻辑卷不会换行
grep '/'   过滤凡是里面带斜线的
$4>23000 {print $4}   如果第四列大于23000,则打印第四列

$0:按照暂存空间理解

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读