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}'
代表按照空格分列 然后获取最后一列
- 结果为
- 先获取 IP 所在的行