AWK

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AWK相关的知识,希望对你有一定的参考价值。

概念:

工作原理

  • 扫描文件从第一行到最后一行 进行处理文件
  • 使用一行作为输入,并将这一行赋值给内部变量$0
  • 然后,行被 " : " (默认为空格或制表符)分解成字段或域,每个字段存储在已编号的变量中,从$1开始编号
  • 内部变量"FS"来确定字段分割符
  • AWK打印字段时,print函数打印,awk在打印的字段之间加上空格,因为$1,$3之间有一个逗号,逗号被定为输出字段分割符OFS
  • awk输出之后,将从文件中获取另一行,将其存储在$0中,覆盖原来的内容

AWK的命令格式

  • 默认情况下是空格和(tab)进行分割

  • awk的两种形式的语法格式

    • awk [options] ‘commands‘ filename

    • options

      • -F 指定分隔符,默认的分隔符是空格或者制表符(tab)
    • command

      • BEGIN{} {} END{}
      • 行处理前(读文件之前) 行处理 行处理后
    • Example:

      • 这个例子的意思是在读取config文件之前打印了1/2,然后每读取文件一行打印一个OK,文件读取完成后打印“---------”
      awk ‘BEGIN{print 1/2}   {print "ok"}   END{print "endfile"}‘ /etc/selinux/config
      0.5
      ok
      ok
      ok
      ok
      ok
      endfile
      • 
        -F ":" 实际含义就是  这里FS指定了冒号和  
        awk ‘BEGIN{FS=":"} {print $1,$2}‘ /etc/passwd
        root x
        bin x
        daemon x
        adm x
        lp x
        sync x
        shutdown x
        OFS指定了输出的方式
        awk ‘BEGIN{FS=":";OFS="---"} {print $1,$2}‘ /etc/passwd
        root---x
        bin---x
        daemon---x
        adm---x
        lp---x

AWK的命令格式:

  • awk ‘pattern‘ (模式,正则表达式的模式)filename

    awk ‘/root/‘ /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    operator:x:11:0:operator:/root:/sbin/nologin

    pattern 模式 指的是正则表达式

  • awk ‘{action}‘ filename

    awk -F: ‘{print $1}‘ /etc/passwd
  • awk ‘pattern {action}‘ filename

    awk -F ":" ‘/root/{print $1,$3}‘ /etc/passwd
    root 0
    operator 11
    
    awk ‘BEGIN{FS=":"} /root/{print $1,$3}‘ /etc/passwd
    root 0
    operator 11

AWK的内部变量

  • $0 记录文本的内容

  • NR 返回屏幕文本所有内容的行号

  • FNR

    awk -F: ‘{print FNR,$0}‘ /etc/passwd
  • NF 指的行字段的数字

    $NF 指的是最后一个字段

  • FS 输入字段分割符,默认为空格

  • OFS 输出字段分隔符

  • RS

    awk -F: ‘BEGIN{RS=""} {print $0}‘ filename
  • ORS

    区别:

    ? 字段分隔符: FS OFS 默认空格或制表符

    ? 记录分隔符:RS ORS 默认换行符

以上是关于AWK的主要内容,如果未能解决你的问题,请参考以下文章

awk

在awk代码中引用shell变量的方法

精通awk系列:awk读取行的细节

awk 脚本帮助 - 逻辑问题

linux awk命令的使用

sh 使用awk删除可执行代码的有效负载