【经验总结】Awk中sub函数的用法

Awk中sub函数的用法

By Binary

 

 

 

    有一文本:

        0001|20081223efskjfdj|EREADFASDLKJCV

        0002|20081208djfksdaa|JDKFJALSDJFsddf

        0003|20081208efskjfdj|EREADFASDLKJCV

        0004|20081211djfksdaa1234|JDKFJALSDJFsddf

        ... ...

 

    以'|'为分隔, 现要将第二个域字母前的数字去掉,其他地方都不变, 输出为:

        0001|efskjfdj|EREADFASDLKJCV

        0002|djfksdaa|JDKFJALSDJFsddf

        0003|efskjfdj|EREADFASDLKJCV

        0004|djfksdaa1234|JDKFJALSDJFsddf

        ... ...

 

    解法:

        awk -F '|' 'BEGIN{ OFS="|" } {sub(/[0-9]+/,"",$2);print $0}' data_file

        awk -F '|' -v OFS='|' '{sub(/[0-9]+/,"",$2);print $0}' data_file

 

    其他方法:

 

 

    awk的sub函数用法:

    sub函数匹配指定域/记录中最大、最靠左边的子字符串的正则表达式,并用替换字符串替换这些字符串。

    如果没有指定目标字符串就默认使用整个记录。替换只发生在第一次匹配的时候。格式如下:

        sub (regular expression, substitution string):

        sub (regular expression, substitution string, target string)

    实例:

        $ awk '{ sub(/test/, "mytest"); print }' testfile

        $ awk '{ sub(/test/, "mytest", $1); print }' testfile

    第一个例子在整个记录中匹配,替换只发生在每行第一次匹配发生的时候。

    第二个例子在整个记录的第一个域中进行匹配,替换只发生在每行第一次匹配发生的时候。

    如要在整个文件中进行匹配需要用到gsub

    gsub函数作用如sub,但它在整个文档中进行匹配。格式如下:

        gsub (regular expression, substitution string)

        gsub (regular expression, substitution string, target string)

     实例:

        $ awk '{ gsub(/test/, "mytest"); print }' testfile

        $ awk '{ gsub(/test/, "mytest", $1); print }' testfile

    第一个例子在整个文档中匹配test,匹配的都被替换成mytest。

    第二个例子在整个文档的第一个域中匹配,所有匹配的都被替换成mytest。

 

    另外, 只有当记录中的域有改变的时候 ,指定0FS变量才有用, 如果记录中的域无变化, 指定OFS产生不了实际效果。

              ==========

    awk -F'|' -v OFS='|' '{ gsub(/[0-9]/, "", $3); print $0; }' data.txt   

    将把第三个域中所有数字都去掉。

              ==========

    awk -F'|' -v OFS='|' '{ gsub(/[/x30-/x39]/, "", $3); print $0; }' data.txt 

    另外,对于数字的匹配,可以使用十六进制。

 

 

本文原创自无线技术运营空间: http://wireless.qzone.qq.com 及 http://blog.csdn.net/wireless_tech (专注无线技术运营——无线技术(操作系统/数据库/WEB前端/负载均衡/系统容灾/系统安全/短信接入/WAP接入/3G等)、无线业务运营、无线开放平台、统计分析(用户行为分析/数据挖掘)、CP合作,联系我们:1780551083@qq.com)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值