AWK是一种模式扫描和处理语言,它搜索一个活多个文件,以查看这些文件中是否存在匹配指定模式的记录。使用AWK可以生成报告或者过滤文本。它在处理时不区分数字和文本,如果将两者混合在一起,AWK通常可以得出正确的答案。

1.语法

gawk[options] [program] [file-list]

gawk[options] -f program-file [file-list]

2.语言基础:

gawk程序(来自命令或者程序文件中的程序)由一行或者多行文本构成,其中包含一个模式(pattern)和/或动作(action),格式如下:

    pattern {action}

2.1 模式(pattern)

     ~ 和 !~ 

   用斜杠把正则表达式扣起来,就可以将其看做模式。“~”运算符用于测试某个字段或者变量是否匹配正则表达式。" !~ "运算符用于测试不匹配。可以使用布尔运算||(OR) 或者&&(AND)来组合任何模式。

例:

gawk '/volvo/ ' cars

gawk '2000 <= $5 && $5<9000' cars

    BEGINEND    

BEGINEND是两种独特的模式,分别执行在gawk开始处理输入信息之前和处理完毕输入之后的命令。

例:

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

gawk 'END {print NR, "/etc/passwd print."} ' /etc/passwd

,(逗号) 逗号是范围运算符

例:

gawk '/volvo/ , /bmw/ ' cars

gawk 'NR == 2 , NR == 4' cars

2.2 动作(action)

  如果gawk匹配某种模式,它就执行gawk命令的动作部分所指定的动作。如果没有指定动作,默认print命令,这个动作将记录从输入复制到标准输出。

  如果print命令后面带有参数,gawk就只能显示用户指定的参数。这些参数可以是变量或者字符串常量。可以将print命令的输出发送到文件(>),追加到文件(>>)或者通过管道将其发送给另一个程序的输入(|)

  除非用逗号将print命令中的各项分开,否则gawk将它们连接起来。逗号使得gawk用输出字段分隔符(OFS,通常是空格)将各项分隔开。

  用分号将多个动作隔开,可以在同一行上使用多个动作。

3.变量

 变量

含义 

$0 当前记录 
$1~$n 当前记录中的字段 
FS 输入字段分隔符 
NF 当前记录的字段数目 
NR 当前记录的记录编码 
OFS 输出字段分隔符(默认为空格) 

例:

last -n 5 | awk '{ print $1 "\t lines: " NR "\t columes: " NF}'