AWK命令

作者: dming1024 | 来源:发表于2019-04-29 21:31 被阅读0次

    参考文章:
    http://www.zsythink.net/archives/tag/awk/
    如果你是awk小白,这篇文章或许对你很有用,但是我更推荐朱双印的博客,因为他写的教程特别有趣,而且还很简单明了,这里我也是参考他的博客学习,然后自己做了一些练习和整理,相信当你学完awk,会像我一样爱上使用linux的文本处理能力。

    awk命令的一般模式:
    awk [-F|-f|-v] ‘BEGIN{} //{command1; command2} END{}’ file

    [-F|-f|-v] 大参数,-F指定分隔符,-f调用脚本,-v定义变量 var=value

    ' ' 引用代码块

    BEGIN 初始化代码块,在对每一行进行处理之前,初始化代码,主要是引用全局变量,设置FS分隔符

    // 匹配代码块,可以是字符串或正则表达式

    {} 命令代码块,包含一条或多条命令

    ; 多条命令使用分号分隔

    END 结尾代码块,在对每一行进行处理之后再执行的代码块,主要是进行最终计算或输出结尾摘要信息

    更为general的形式为: awk '{}' file

    awk '{print $0}' file
    #或者
    awk '{print }' file
    #指定分割符号
    awk -F":" '{print $1}' /etc/passwd #打印第一列
    #指定分割符,打印特定列,以制定的分割符号
    awk -F":" '{print $2,$3}' OFS="\t" /etc/passwd
    #统计文件中有指定特征的行
    awk 'BEGIN{X=0} /^$/{ X+=1 } END{print "I find",X,"blank lines."}' test 
    

    自定义输出

    #制定分割符号,表头,以及选择要打印的内容
    awk -F":" '{print "Username:" $1 "\t\t Uid:" $3 }' /etc/passwd
    
    awk -F: '{print NF}' /etc/passwd #显示每行有多少字段(Number Flied)
    awk -F: 'NF==4 {print }' /etc/passwd #显示只有4个字段的行
    awk -F: 'NF>2{print $0}' /etc/passwd #显示每行字段数量大于2的行
    

    匹配:

    //纯字符匹配 !//纯字符不匹配 ~//字段值匹配 !~//字段值不匹配 ~/a1|a2/字段值匹配a1或a2

    awk '/root/' /etc/passwd #打印root行
    awk -F":" '$1 ~/root/{print $0}' /etc/passwd #打印$1为root的行
    awk -F":" '{if($1 ~ /root/) print }' /etc/passwd #打印$1为root的行
    

    条件表达式

    ==,>,>=,!=,此外if必须用在{}内

    awk -F":" '$3>500{print $0}' /etc/passwd #打印第3列值大于500的行
    awk -F":" '{if($3>500) print }' /etc/passwd 
    

    相关文章

      网友评论

          本文标题:AWK命令

          本文链接:https://www.haomeiwen.com/subject/sftpnqtx.html