AWK详解

awk:对文档有强大的搜索功能,逐行处理并输出

这里的$1 $2 $3… 是awk内置变量,表示列,空格为默认分隔符,也可以人为指定哪个为分隔符,F指定分隔符

[root@server0 ~]# awk '{print $1,$3}' 222
hello world
welcome beijing

[root@server0 ~]# cat 333
root:x:0:0:root:/root:/bin/bash
-F指定分隔符,以下指定:为分隔符
[root@server0 ~]# awk -F: '{print $5}' 333
root

NR 行 NF 列
常量要引起来,变量不用加

[root@server0 ~]# awk -F[:/] '{pr[root@server0 ~]# awk -F[:/] '{print "当前行有"NF"列"}' 333

[root@server0 ~]# awk -F[:/] '{print "当前行有"NF"列"}' 333
当前行有10列

配合正则的格式,在前面加"//",用于定位行

[root@server0 ~]# awk '/^w/{print NR"行有"NF"列"}' 222
2行有3列

awk流程控制
awk [选项] ‘BEGIN{指令} {指令} END{指令}’ 文件
中间的{指令}是 逐行任务
剩下为BEGIN与END是额外任务,与内容无关
\t相当于tab键,可以自动排版

[root@server0 ~]# awk 'BEGIN{print "asasas"}{print }' 222
asasas
hello the world
welcome to beijing

[root@server0 ~]# awk 'BEGIN{x=0}{x++}END{print x}' 222
2

[root@server0 ~]# awk -F[:] 'BEGIN{x=0;print "User\tUID\tHOME"}{print $1"\t"$3"\t"$6 x++}END{print "Toal:" x }' 333 
User	UID	HOME
root	0	/root0
Toal:1

awk处理条件
前面有条件,且输出全部时, "{print}'可以省略
~:代表包含

[root@server0 ~]# awk '/A/' 111
AAA

[root@server0 ~]# awk -F: '$1!~/roo/' /etc/passwd  筛选出第一列不包含"roo"的行
[root@server0 ~]# awk -F: '$7!~/nologin$/{print $1,$2}' /etc/passwd  筛选出第7列不包含nologin$,并输出第一列和第二列的行

使用数值/字符串比较设置条件

[root@server0 ~]# awk 'NR==5' /etc/passwd  输出第5行
[root@server0 ~]# awk -F: '$3==0' /etc/passwd 输出第三列为0的行
[root@server0 ~]# awk -F: '$1=="root"' /etc/passwd  输出第一列为root的行;root默认为变量,需要加引号,变成常量

[root@server0 ~]# awk -F: '$3>=1000' /etc/passwd 输出第三列大于等于1000的行
[root@server0 ~]# awk -F: '$3<=10' /etc/passwd  输出第三列小于等于10的行

使用逻辑符号 && ||

[root@server0 ~]# awk -F: '$3>=1000 || $3<=10' /etc/passwd
[root@server0 ~]# awk -F: '$3>10 && $3<1000' /etc/passwd
[root@server0 ~]# awk 'NR>=2 && NF<=4' /etc/passwd
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值