awk简记

本文介绍了如何利用awk工具高效地进行文本分析。通过具体的示例讲解了awk的基本语法及用法,包括如何进行简单的匹配打印操作、统计匹配行数量等,并简要提及了一些内置函数和内部变量的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        不论什么时候如果要做文本分析awk是必不可少的,它可以大大提高文本分析的效率,它强大且高效。

        awk基本格式如下

    awk -F ':' 'BEGIN{...} {...action} END{...}' File
        awk的动作流程
        1.执行BEGIN里的内容,一般是一些初始化操作。

        2.读入File文件的一行内容,以\n为分隔符,然后把这一行按-F后的分隔符分成N个域,$0表示整行内容,$1表示第1个域的内容,$2表示第2个域的内容,以此类推.

        3.执行{...action}中的代码,一般是针对当前行内容的操作,例如模式匹配打印等。

        4.执行END中的代码,一般是些结果打印

         看起来比较复杂,其实使用中-F BEGIN END这些字段都是不必须的,例如打印最近登录的5个账号:

    last -n 5 | awk  '{print $1}'
        因为账号名称在第一个域,所以只需要 awk '{print $1}' 就能打印出来了,-F不指定的话默认已空格和制表符分隔,BEGIN、END可省略。

        awk语法和c语言很像,继承了c语言的风格,如下面统计了文件里有多少匹配行:

    awk -F ':' 'BEGIN {count=0;print "init=",count} {if($1~/root/) {count=count+1;print $0}} END{print "count=",count}' /etc/passwd  

        其中匹配可以这样简写awk '$1~/root/{print $0}' /etc/passwd,/ /中间内容按照正则表达式匹配。

        简单匹配也可以这样,^表示开头,$表示结尾

    awk -F":" '$1~/^root$/{print $0}' /etc/passwd
    awk -F":" '$1=="root" {print $0}' /etc/passwd
    awk -F":" '{if($1=="root"||$1~/mysql/) {print $0}}' /etc/passwd
    awk -F":" 'BEGIN{OFS=":"}{gsub("root","mysql",$1);print $0}' /etc/passwd


        awk里内嵌了很多处理函数,例如length sub gsub substr match split tolower toupper    print printf    rand srand    sin cos int log     systime strftime等,使用方法基本和c语言一致。

        awk里还有一些常用内部变量,例如 FILENAME awk处理的文件名 NR 已读取的记录数 NF 域的个数 FS 域分隔符设置,等价于-F OFS 设置输出域分隔符 RS 记录分隔符 ORS 输出记录分隔符。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值