美文网首页Linux积累
Linux 命令 & shell 脚本之11(gawk 程序)

Linux 命令 & shell 脚本之11(gawk 程序)

作者: 轻飘飘D | 来源:发表于2020-10-25 00:11 被阅读0次

    在gawk编程语言中,你可以做下面的事情:
     定义变量来保存数据;
     使用算术和字符串操作符来处理数据;
     使用结构化编程概念(比如if-then语句和循环)来为数据处理增加处理逻辑;
     通过提取数据文件中的数据元素,将其重新排列或格式化,生成格式化报告。

    gawk程序的基本格式如下:
    gawk options program file

    gawk选项

    选 项 描 述
    -F fs 指定行中划分数据字段的字段分隔符
    -f file 从指定的文件中读取程序
    -v var=value 定义gawk程序中的一个变量及其默认值
    -mf N 指定要处理的数据文件中的最大字段数
    -mr N 指定数据文件中的最大数据行数
    -W keyword 指定gawk的兼容模式或警告等级

    1.使用数据字段变量

    。它会自动给一行中的每个数据元素分
    配一个变量。默认情况下,gawk会将如下变量分配给它在文本行中发现的数据字段:
     $0代表整个文本行;
     $1代表文本行中的第1个数据字段;
     $2代表文本行中的第2个数据字段;
     $n代表文本行中的第n个数据字段。
    在文本行中,每个数据字段都是通过字段分隔符划分的。gawk在读取一行文本时,
    会用预定义的字段分隔符划分每个数据字段。gawk中默认的字段分隔符是任意的空白字符(例如空格或制表符)。
    
    [root@MYSQL8 myshell]# cat data2.txt 
    One line of test text.
    Two lines of test text.
    Three lines of test text.
    
    [root@MYSQL8 myshell]# gawk '{print $1}' data2.txt
    One
    Two
    Three
    
    [root@MYSQL8 myshell]# cat data3.txt
    UserName,,Age,,Sex
    xag,,42,,M
    yyc,,37,,F
    xrj,,12,,F
    xrx,,01,,F
    要读取采用了其他字段分隔符的文件,可以用-F选项指定 ($2 : 每行的第2个字段)
    [root@MYSQL8 myshell]# gawk -F,, '{print $2}' data3.txt
    Age
    42
    37
    12
    01
    
    [root@MYSQL8 myshell]# gawk -F',,' '{print $2}' data3.txt
    Age
    42
    37
    12
    01
    

    2.在程序脚本中使用多个命令

    [root@MYSQL8 myshell]# echo "My name is xag" | gawk '{$4="xuaiguo"; print $0}'
    My name is xuaiguo
    第一条命令会将 “My name is xag” 串中 字段变量$4=xag 重新赋值xuaiguo。第二条命令会打印整个数据字段。
    

    3.从文件中读取程序

    [root@MYSQL8 myshell]# cat script2.gawk
    {
     text = "'s age is "
     print $1 text $2
    }
    注意,gawk程序在引用变量值时并未像shell脚本一样使用美元符
    
    [root@MYSQL8 myshell]# gawk -F',,' -f script2.gawk data3.txt
    UserName's age is Age
    xag's age is 42
    yyc's age is 37
    xrj's age is 12
    xrx's age is 01
    
    BEGIN脚本创建了标题 (在处理数据前运行脚本)
    END脚本生成页脚 (在处理数据后运行脚本)
    
    [root@MYSQL8 myshell]# cat script3.gawk
    BEGIN {
    print "The latest list of users and shells"
    print " Name \t Age"
    print "----- \t ---"
    FS=",,"
    }
    {
    print $1 " \t " $2
    }
    
    END {
    print "This concludes the listing"
    }
    
    [root@MYSQL8 myshell]# gawk -f script3.gawk data3.txt
    The latest list of users and shells
     Name    Age
    -----    ---
    UserName     Age
    xag      42
    yyc      37
    xrj      12
    xrx      01
    

    相关文章

      网友评论

        本文标题:Linux 命令 & shell 脚本之11(gawk 程序)

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