Linux命令之awk

awk 是 Linux 中一个强大的文本分析工具

简介

awk有3个不同版本: awk、nawk和gawk,未作特别说明,一般指gawk,gawk 是 AWK 的 GNU 版本。

使用方法

awk ‘{pattern + action}’ {filenames}

命令行方式

awk [-F field-separator] ‘commands’ input-file(s)

  • 其中,commands 是真正awk命令,[-F域分隔符]是可选的。 input-file(s) 是待处理的文件。
  • 在awk中,文件的每一行中,由域分隔符分开的每一项称为一个域。
  • 通常,在不指名-F域分隔符的情况下,默认的域分隔符是空格。

shell脚本方式

  • 将所有的awk命令插入一个文件,并使awk程序可执行,然后awk命令解释器作为脚本的首行,一遍通过键入脚本名称来调用。
  • 相当于shell脚本首行的 #!/bin/sh 可以换成 #!/bin/awk

命令文件方式

awk -f awk-script-file input-file(s)

将所有的awk命令插入一个单独文件
其中,-f选项加载awk-script-file中的awk脚本,input-file(s)跟上面的是一样的。

使用案例

解析一个域名的IP

  • nslookup sz.yumc.pw | grep Address | tail -n 1 | awk '{print $NF}'
    • 先获取 IP 所在的行 nslookup sz.yumc.pw | grep Address | tail -n 1 (grep tail 命令请自行百度)
      • 结果为 Address 1: 120.193.59.11 部分系统为 Address: 120.193.59.11
      • 由于具体的列不确定 所以不能用 awk '{print $x}' 的方式获取
      • 在 awk 中 $NF 代表获取分列之后的最后一列
      • 所以 awk '{print $NF}' 代表按照空格分列 然后获取最后一列