美文网首页
Linux:使用awk进行高级文本处理

Linux:使用awk进行高级文本处理

作者: Z_bioinfo | 来源:发表于2022-04-26 16:54 被阅读0次
    1.awk脚本的基本结构
    awk ' BEGIN{ print "start" } pattern { commands } END{ print "end" } file
    
    

    awk由三部分组成,BEGIN,END,和带模式匹配选项的常见语句块,这三部分都是可选项

    echo -e "line1\nline2" | awk 'BEGIN {print "start" } { print } END{ print "end" } '
    start
    line1
    line2
    end
    
    echo | awk ' { var1 = "v1"; var2 = "v2"; var3 = "v3" ; print var1,var2,var3; } '
    v1 v2 v3
    
    echo | awk ' { var1 = "v1"; var2 = "v2"; var3 = "v3" ; print var1 "-" var2 "-" var3; } '
    v1-v2-v3
    
    

    可以用于awk的特殊变量

    NR:表示记录数量,在执行过程中对应于当前的行号
    NF:表示字段数量,在执行过程中对应于当前行的字段数

    $0:包含执行过程中当前行的文本内容
    $1:第一个字段的文本内容
    $2:第二个字段的文本内容
    echo -e "line1 f2 f3\nline2 f4 f5\nline3 f6 f7" | awk '{ print "line no : "NR",No of fields: "NF, "$0 = "$0, "$1 = "$1,"$2 = "$2, "$3 = "$3 } '
    line no : 1,No of fields: 3 $0 = line1 f2 f3 $1 = line1 $2 = f2 $3 = f3
    line no : 2,No of fields: 3 $0 = line2 f4 f5 $1 = line2 $2 = f4 $3 = f5
    line no : 3,No of fields: 3 $0 = line3 f6 f7 $1 = line3 $2 = f6 $3 = f7
    
    打印每一行的第2和第3个字段
    awk '{ print $3,$2 } ' file
    统计文件的行数
    awk ' END { print NR } ' file
    

    将外部变量值传递给awk

    var2="a" ; var2="b"
    echo | awk ' { print v1,v2 } ' v1=$var1 v2=$var2
    a b
    

    用getline读取行
    AWK通常默认读取一个文件的所有行,如果只想读取某一行,可以使用getline函数
    语法:getline var

    seq 5 | awk 'BEGIN { getline; print "read ahead first line", $0 } { print $0 }'
    read ahead first line 1
    2
    3
    4
    5
    

    使用过滤模式对awk处理的行进行过滤

    awk 'NR < 5 ' 行号小于5的行
    awk 'NR == 1,NR == 4 ' 行号在1到5之间的行
    awk '/Linux/ '  包含Linux的行
    awk '!/Linux/ '  不包含Linux的行
    

    设置字段界定符,默认字段是空格
    模式:-F "delimiter"

    awk -F: ' { print $NF } ' /etc/passwd
    

    相关文章

      网友评论

          本文标题:Linux:使用awk进行高级文本处理

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