awk 简单用法

说明:这里记述的是awk实际是gawk. 文件来自于 unxutils.sourceforge.net
使用环境:WINXP,CMD

用途:awk是用来对文本数据按行(记录)来处理,通过表达式匹配来过滤生成新的文本.

命令:
例1
C: > awk  - F :  " /[0-9]*/ {print $0} "  infile.txt

大体有两种执行模式,上面写的是命令行模式.
    -F  这个参数用来指定记录的分隔符,相当于JAVA里的split方法的第二个参数的作用.
            这里例子是一个冒号 , 也可以是其它,
    "/.../ {...}" 这个第二部分是重点, 前一部分用来写正则, 后一部分用来写处理,主要是出力方式.
         注意, 上面的正则指的是如果这一行记录包含这一个正则匹配项的话,就执行后面.
                    而不是一行记录完全和它匹配
.       
    infile.txt
         
这个应该猜到了,就是入力文件.

几个特殊变量   
      %0 指这一整条记录.
       %1, %2, .... 指在 -F 参数指定的情况下,这条记录被分成的组员,从左向右,记为%1,%2,%3...
      NF 该条记录被分成的组员数量,
     NR 当前的记录号(行号)
     默认的记录分隔符是换行符,所以上面写的时候,把记录和行等同起来了,这只是一般情况.

例2
C: > awk  - f my.awk infile.txt

这是另外一种执行方式 ,通过 -f 参数,把写好的awk脚本引进来,再对infile.txt进行处理.
    下面是一个脚本的例子
BEGIN {
  FS
="/n"
  RS
=""
  x 
= 0
}
;
/ [ 0 - 9 ] +/   {x++} ;
END
{
  print 
"count:" x
}


由BEGIN,中间,END三部分组成. 其中 BEGIN是初期化变量和定义分隔符信息的地方.
第二部分不重述
第三部分是终了处理.
其中BEGIN,和END的前后,注意有分号隔开.
这个写法有点类似于SQLPLUS的表头,表尾出力.

上面说到记录分隔符,其实在BEGIN里面,就是由RS来指定的,这里的是""表示空行.即有一个空行出行,
    进行下一条记录的处理.
相似的,FS是来指定字段分隔符的.这里的是换行符.

总结:
    在*NIX下awk的表达式是由单引号括起来的,不过在WIN下面是用双引号.
    而在{}里面再要用双引号时,要用转义符了.即/"
   例如:  awk -F "<$$$>" "{print /" This is line :/" NR  /" has /" NF /" words /" }"

PS
    awk -F : " $1 ~ /..../  && $2 > 28  {print}" infile 这是一个复合条件的用法. 其实很简单
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值