轻松玩转awk

awk的处理方式

awk一次处理一行内容
awk对每行可以进行切片处理
例如

awk  -F ':' '{print $1}' /etc/password

-F指定每一行分割符号,这样就把被每行被分割的第一个单词输出了
如果不指定默认是以空格作为分割的

awk的格式

awk [options] 'command' file

另外 command 还可以分为(正则表达式,逻辑判断式)和(awk操作命令)

command:pattern {awk操作命令}

对应上面的命令 指定分隔符 -F ':' 相当于 [options]
{print $1} 相当于command中的 awk操作命令

至于 patterrn 部分后面介绍

awk内置参数

NR: 每行的行号
NF:每行的字段数量(被分割成多少段)
FILENAME:操作的文件名
例如:

awk -F ':' '{print NR,NF}' /etc/passwd

输出:

1 7
2 7
3 7
4 7
......
......
40 7
41 7
42 7
43 7
44 7

可以看到 文件一共有44行
每一行被分割成 7段
这里的相当于空格分割

awk中的if else语句

awk -F ':' '{if($3>100)print}' /etc/passwd

输出 uid大于100的行
(print不加参数可以输出一整行,或者print$0也可以输出一整行)
另外也可以用到 else语句

awk -F ':' '{if($3>100)print;else print"uid小于100"}' /etc/passwd

记得加分号

awk中的 parttern

还记的我们前面挖的坑吗,patterrn还没有介绍

逻辑判断式
awk -F ':' '$3>100{print}' /etc/passwd
正则表达式

awk中的正则可以匹配一行中的字段

awk -F ':' '$1~/^r/{print $1}' /etc/passwd

匹配第一个字段 以 r 开头的每一行,然后输出出来第一个字段
正则表达式要在 / /之间
要匹配的字段和正则之间要用 ~连接
如果不匹配固定的字段,像这样

awk -F ':' '{print $1}' /etc/passwd

这种匹配就会匹配整行

BEGIN END语法

awk [options] BEGIN{awk操作命令} 'command'  END{awk操作命令} file

BEGIN 后面执行的 awk 操作命令在文件没有输入的时候就执行了(这个时候是不能输出文件名的)
一般做统计的时候 初始化变量,或者输出表头

END 后面执行的操作也是在读取完文件的每一行后才执行的
所以 END 和 BEGIN 都是不参与循环的

awk的数组

用awk统计 netstat -apn有多少 CONNET和多少LISTEN

netstat -apn|awk '$6~/CONNECTED|LISTEN/{sum[$6]++}END{for(i in sum)print i,sum[i]}'

输出:

LISTEN 6
CONNECTED 803

这里可以看到 awk 的数组更类似于 python 中的字典,可以通过对应的 键访问到对应的值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hello_wshuo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值