zoukankan      html  css  js  c++  java
  • 十五、gawk命令使用

    gawk命令

    gawk程序是Unix中原始awk程序的GNU版本。

    它可以用来写脚本的方式处理文本数据。

    他可以

    • 定义变量保存数据
    • 使用算数运算符字符串操作符处理数据
    • 使用结构化逻辑语句处理数据
    • 提取数据重新定义格式(如过滤日志文件找出错误行便于集中处理阅读)

    语法格式

    gawk options program file

     gawk选项

    选项 描述
    -F fs 指定分隔符
    -f file 指定含有命令的文件
    -v var=value 定义变量
    -mf N 指定处理文件中最大字段数
    -mr N 指定数据文件中最大数据行数
    -W keyword 指定gawk的兼容模式或警告等级

    从命令行读取程序脚本

    gawk命令的脚本使用花括号定义。

    gawk命令认为脚本是一串字符串所以还需要用单引号括起来。

    gawk程序会针对数据流中的每行文本执行程序脚本。

    注意:如下命令,因为没有在命令行上指定文件名,gawk默认会从STDIN也就是键盘接收数据。

    即从键盘中中随便输入文本,接着都会执行输出Hello World!然后再等待输入。

    [root@tzPC 19Unit]# gawk '{print "Hello World!"}'
    This is a test
    Hello World!

     Ctrl+D可以终止gawk程序

    使用数据字段变量

    gawk会自动给一行中每个数据字段分配一个变量

    $0代表整个文本行

    $1代表文本行中的第1个数据字段

    $2代表文本行中第2个数据字段

    ...

    在文本行中每个数据字段都是通过字段分隔符划分的。默认是空格或制表符

    例:使用gawk读取文本文件,显示第一个数据字段的值

    [root@tzPC 19Unit]# cat data2.txt 
    One line of test text.
    Two lines of test text.
    Three     lines of test text.
    [root@tzPC 19Unit]# gawk '{print $1}' data2.txt 
    One
    Two
    Three

    -F参数更改字段分隔符

    [root@tzPC 19Unit]# gawk -F: '{print $1}' /etc/passwd
    root
    bin
    daemon
    adm
    lp
    sync
    shutdown
    ...

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

    使用分号分隔命令即可。

    [root@tzPC 19Unit]# echo "My name is tz" | gawk '{$4="root";print $0}'
    My name is root

    也可以使用如下写法

    因为没有输入数据流,所以gawk默认会从STDIN中获取数据也就是从键盘中获取,所以要手动输入数据,然后才会执行gawk命令输出数据,使用Ctrl+D退出程序

    [root@tzPC ~]# gawk '{
    > $4="root"
    > print $0}'
    My name is tz
    My name is root

     从文件中读取程序命令

    使用-f选项指定命令文件

    [root@tzPC 19Unit]# cat script2.gawk 
    {print $1 "'s home directory is " $6}
    [root@tzPC 19Unit]# gawk -F: -f script2.gawk /etc/passwd
    root's home directory is /root
    bin's home directory is /bin
    daemon's home directory is /sbin
    adm's home directory is /var/adm
    ...

     使用含有多行命令的命令文件

    注意:这里定义了变量text,再次调用它的时候不需要加$

    [root@tzPC 19Unit]# cat script3.gawk 
    {
    text="'s home directory is "
    print $1 text $6
    }
    [root@tzPC 19Unit]# gawk -F: -f script3.gawk /etc/passwd
    root's home directory is /root
    bin's home directory is /bin
    daemon's home directory is /sbin
    adm's home directory is /var/adm
    lp's home directory is /var/spool/lpd
    sync's home directory is /sbin

    在处理数据前运行脚本

    使用关键字BEGIN

    [root@tzPC 19Unit]# cat data3.txt 
    Line 1
    Line 2
    Line 3
    [root@tzPC 19Unit]# gawk 'BEGIN {print "The data3 File Contents:"}
    > {print $0}' data3.txt
    The data3 File Contents:
    Line 1
    Line 2
    Line 3

    再处理数据后运行脚本

    使用END关键字

    [root@tzPC 19Unit]# gawk 'BEGIN {Print "The data3 File Contents:"}
    > {print $0}
    > END {print "End of File"}' data3.txt
    Line 1
    Line 2
    Line 3
    End of File

    高大上的格式化输出报告用法来了,圈重点!

    [root@tzPC 19Unit]# cat script4.gawk 
    BEGIN{
    print "The latest list of users and shells"
    print " UserID 	 Shell"
    print "------- 	 -------"
    FS=":"
    }
    
    {
    print $1 "    	 "    $7
    }
    
    END{
    print "This concludes the listing"
    }
    
    [root@tzPC 19Unit]# gawk -f script4.gawk /etc/passwd
    The latest list of users and shells
     UserID      Shell
    -------      -------
    root         /bin/bash
    bin         /sbin/nologin
    postfix         /sbin/nologin
    sshd         /sbin/nologin
    tz         /bin/bash
    This concludes the listing

     学习来自:《Linux命令行与Shell脚本大全 第3版》第19章

    今天的学习是为了以后的工作更加的轻松!
  • 相关阅读:
    sparql学习sparql示例、dbpedia在线验证
    中国绿卡
    逾期率的水有多深,你知道吗?
    ICO和区块链区别
    What are the benefits to using anonymous functions instead of named functions for callbacks and parameters in JavaScript event code?
    Link static data in sql source control
    sql data compare
    viewbag
    多态的实际使用
    win10 sedlauncher.exe占用cpu处理
  • 原文地址:https://www.cnblogs.com/tz90/p/13582505.html
Copyright © 2011-2022 走看看