AWK 是 Linux 中常用的命令,有 GAWK、NAWK和 OAWK 之分,一般 Linux 发行版都使用 GAWK。

AWK 是以行为单位处理文本的,默认使用 空格\t 作为分隔符分组一行,将对应的字段填入指定的变量。命令的形式为:

awk '条件{执行语句} 条件{执行语句}' filename

输入来源有两种

多条条件之间是独立的,会一一匹配条件,条件满足则执行响应的执行语句

内置变量

使用条件和执行语句的例子:

awk '{FS=":"} $3<100{print $1 "\t"  $3}' /etc/passwd

输出是:

第一行就生效

第一行没有生效,要让第一行生效需要使用关键字 BEGIN

awk 'BEGIN {FS=":"} $3<100{print $1 "\t"  $3}' /etc/passwd

多条命令

awk 'BEGIN {FS=":"} {print $1; print $2}' /etc/passwd

命令括号中可以存在多条命令,但是他们要用 ";" 号隔开,或者通过换行自然分割也行。

字符串匹配

其实 AWK 可以用来替换 grep,例如,我们普通用的 grep:

如果改成 awk 的话,那么就可以变成:

这样就没 grep 什么事了,什么?grep -v 很好用?试试这一句:

awk '! /root/ { print $1}' /etc/passwd

字段过滤

刚才演示的例子只能过滤一行,然而,我们可以做得更多,我们可以只过滤用户名:

awk 'BEGIN {FS=":"} $1 ~ /root/{print $1}' /etc/passwd

BEGIN 和 END

环境变量

可以在 AWK 中使用环境变量,方式为变量 ENVIRON,传入的方式可以是 export 环境变量,也可以是在调用 awk 的时候传递 -v 参数

$ awk -v val=$x '{print $1, $2, $3, val, ENVIRON["ts"]}' OFS="\t" /etc/passwd

Reference

  1. AWK 简明教程
  2. SKIP grep, use AWK