awk学习记录

awk小计

##记录一下学习awk的东西
awk进行流处理,我们一般主要是对列对象进行一些操作。
awk命令格式:
awk ‘pattern’ ‘action’ filename;
其中pattern 代表匹配模式,如,我想匹配文件中的出现“test”的行,则可以写成,awk /test/ ‘{print $0}’ 1.txt;
所有要进行的操作即action,要写成形如‘{}’的格式,‘’所包含的内容可以有这种格式:‘BEGIN …{} END…’,其中begin和end是在处理文本之前和之后可进行的操作,如:
awk 'BEGIN {print “this text show how begin work”} {print $1} ',这意味着,再处理文本之前,首先会执行 begin 后面的第一个{}中的action,然后对每行执行第二个action.
相对的END, awk ‘{print $1} END {print “this text show how end word”}’,这表示对每行处理结束之后,将执行END后面的action,。
现在讨论一下awk中的行处理,如,现在想对莫一个文本中的偶数行,进行一种处理,则可以写:
awk ‘NR%2==0 {print $1}’ filename, 可见,NR代表当前处理行,每处理一行会递增NR++(ps: this is anoher FNR,we’ll talk is later),so,这也是一种命令形式,既在‘{}’中的花括号前,可以加一些逻辑判断,‘do_some_logical {}’,只有条件为真,才会去执行后面的action,如果我只想打印出偶数行,显然我可以写:
awk ‘NR%2==0 {print $0}’;此外还有一种有趣的写法:
awk ‘{getlilne; print $0}’;这里解释一下,awk 每次读取一行进行处理,getline是内置的一种命令,继续往下读取,同时会更新NR, $0 1 2…,所以这样做,awk运行时读取了第一行,然后getline,到了第二行,然后print,然后awk读取了第三行,然后getline到了第四行, 然后print。此外还可以看出{}中可以有多个命令,以;进行分割。
介绍下FNR,awk可同时处理多个文件,所以NR其实代表当前总行数,对于所有文件都会递增,然而FNR代表当前文件,当处理第二个文件时FNR会重新从0开始,NR则不会,只是一直递增。可以用ARGIND的值指代第几个文件,既 arg index。

awk是一种脚本语言,可写成脚本,开头写#!/bin/awkl即可 ./filename.awk,这样运行,如同shell。
(ps: awk很复杂,{}中可以有变量,做运算,加循环,之后再谈)

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值