• awk工具


    1.命令功能

    awk不仅是一个文本处理工具,还是一种编程语言,用来生成报告(excel),awk的功能要比grep、sed更强大。

    2.语法格式

    awk  [option]  ‘pattern{action}’  file

    awk    选项    ‘条件{动作}’    文件

    选项说明

    参数选项

    参数选项说明

    -F

    指定字段分隔符  *****

    -v

    定义或修改一个awk内部变量****

    常用awk内置变量

    变量名

    属性

    $0

    当前记录

    $1~$n

    当前记录的第n个字段

    FS

    输入字段分隔符 默认是空格

    RS

    输入记录分隔符 默认是换行符

    NF

    当前记录中的字段个数 就是有多少列

    NR

    表示行号,从1开始。 NR==5 表示第5行

    0FS

    输出字段分隔符 默认也是空格

    0RS

    输出的记录分隔符 默认为换行符

    awk支持的运算符

       Patterns

           AWK patterns may be one of the following:

                  BEGIN

                  END

                  /regular expression/           #正则表达式

                  relational expression           #关系表达式

                  pattern && pattern           #逻辑与

                  pattern || pattern             #逻辑或

                  pattern ? pattern : pattern     #三目运算符

                  (pattern)

                  ! pattern

                  pattern1, pattern2

     3.使用范例

    测试文件

    [root@localhost ~]# cat -n test.txt 
         1  root:x:0:0:root:/root:/bin/bash
         2  bin:x:1:1:bin:/bin:/sbin/nologin
         3  daemon:x:2:2:daemon:/sbin:/sbin/nologin
         4  adm:x:3:4:adm:/var/adm:/sbin/nologin
         5  lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
         6  sync:x:5:0:sync:/sbin:/bin/sync
         7  shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
         8  halt:x:7:0:halt:/sbin:/sbin/halt
         9  mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
        10  uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
        11  operator:x:11:0:operator:/root:/sbin/nologin
        12  games:x:12:100:games:/usr/games:/sbin/nologin
        13  gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
        14  ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

    示例1 输出第2行到第5行内容

    [root@localhost ~]# awk 'NR==2,NR==5' test.txt 
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    [root@localhost ~]# cat -n test.txt |awk 'NR==2,NR==5'   #通过cat –n给每行标上行号
         2  bin:x:1:1:bin:/bin:/sbin/nologin
         3  daemon:x:2:2:daemon:/sbin:/sbin/nologin
         4  adm:x:3:4:adm:/var/adm:/sbin/nologin
         5  lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

    示例2 通过awk给每行标识上行号

    [root@localhost ~]# awk '{print NR,$0}' test.txt 
    1 root:x:0:0:root:/root:/bin/bash
    2 bin:x:1:1:bin:/bin:/sbin/nologin
    3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
    4 adm:x:3:4:adm:/var/adm:/sbin/nologin
    ......

    示例3 awk给第2行到第5行标上行号

    [root@localhost ~]# awk 'NR==2,NR==5 {print NR,$0}' test.txt 
    2 bin:x:1:1:bin:/bin:/sbin/nologin
    3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
    4 adm:x:3:4:adm:/var/adm:/sbin/nologin
    5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

    示例4 显示test.txt文件的第1列,第5列和最后一列

    [root@localhost ~]# awk -F ":" '{print $1,$5,$NF}' test.txt 
    root root /bin/bash
    bin bin /sbin/nologin
    daemon daemon /sbin/nologin

    显示第2行 到第4行的第1列,第5列和最后一列,并打印行号

    [root@localhost ~]# awk -F ":" '{print NR,$1,$5,$NF}' test.txt  #显示每行行号
    1 root root /bin/bash
    2 bin bin /sbin/nologin
    3 daemon daemon /sbin/nologin
    ......
    [root@localhost ~]# awk -F ":" 'NR==2,NR==4 {print NR,$1,$5,$NF}' test.txt #显示2~4行号
    2 bin bin /sbin/nologin
    3 daemon daemon /sbin/nologin
    4 adm adm /sbin/nologin

    示例5 把/sbin/nologin替换成/bin/no

    [root@localhost ~]# awk '{gsub("/sbin/nologin","/bin/no",$0);print $0}' test.txt 
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/bin/no
    daemon:x:2:2:daemon:/sbin:/bin/no
    adm:x:3:4:adm:/var/adm:/bin/no
    lp:x:4:7:lp:/var/spool/lpd:/bin/no

    gsub语法格式:

    gsub(“替换对象”,“替换内容”,哪一列)

    示例6 取出网卡的IP地址

    [root@localhost ~]# ifconfig eth0 |awk -F "(addr:)|(Bcast:)" 'NR==2 {print $2}'
    172.16.2.10
  • 相关阅读:
    读取手机联络人实例
    MotionEvent中getX()和getRawX()的区别
    Android开源项目发现--- 效率开发工具篇(持续更新)
    开发资源收藏
    ViewHolder VS HolderView ?
    如何测试 Android 中的定时事件
    性能优化实例
    lamba
    并行操作多个序列map
    连续处理函数reduce
  • 原文地址:https://www.cnblogs.com/joechu/p/9000241.html
Copyright © 2020-2023  润新知