awk 编程

1 awk处理流程
awk 按顺序读取文本文件内容,默认以空格区分域。从第一行一直读取到文本的最后一行
可以通过 F 标签重新指定分割域标示。

//将指定文件按照行读取 并且以 : 分割域,分别打印出 正行以及第一个、第二个、第三个域的值
$ awk -F : '{print $0,$1,$2,$3}' filename 


//不同的方法实现上面同样的功能
$ awk 'BEGIN{FS=":"}{print $0,$1,$2,$3}' filename
//这里的BEGIN是指在操作具体函数操作之前的指令,通常配合END使用,也可以单独使用

2 awk 查看字符串是否包含某子串
$ awk '{if($0 ~"root"){print "it matched !"} else{print "nothing..."}}'


~ 是包含子串的正则匹配,也可以使用 !~ 不包含,同理,这里还可以使用 >,>=,<,<=,==,!= 进行计算比较。

包含子串还可以使用 '//' 标签。例如
$ awk '/root/' /etc/passwd

上面的指令 会打印出包含root子串的一整行信息

同理,还可以通过 '//' 标签截取文本中的一整段信息
$ awk '/this is begin str/,/this is end str/' filename 

上面的指令会打印出 文本文件从begin开始到end结束的文本信息

awk查询特定字符开始的字符串
$ awk '$0 ~/^Akl.*/{print $0}' filename 

上面指令完成在指定文件中查询以Akl开头的数据行

3 awk 函数的处理
比较通用的处理指令可以被写在 特定的文件中,在适当的地方进行调用可以增加代码的复用性
例如:
定义一个函数体 在文件 fuc.awk ,其内容被编辑为 {print $1,$2 * $3}
调用此函数
$ awk -f fuc.awk filename 


4 awk 使用循环
awk中可以使用for 循环,也可以使用 while循环
for 实例:
$ echo "" | awk '{for(i=1;i<5;i++){print i}}'

上面指令将会输出 1,2,3,4

while实例:
$ echo "" | awk 'BEGIN{uk=10;print "this is begin line"}{while(uk > 0){print uk;uk--}}END{print "this is end line"}'


5 awk NF NR 的使用
NF : Number of Field,返回的是一个数值,表示指定域的个数
$NF : 返回的则是域本身的值

NR: Number of Records,返回的是一个数值,表示已经读取了多少行数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

annan211

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

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

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

打赏作者

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

抵扣说明:

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

余额充值