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
BEGIN和END
BEGIN和END是两种独特的模式,分别执行在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}'