4. awk
4.1 awk简介
awk,用于处理数据和生成报告的UNIX编程语言,nawk是awk的新版本,gawk是linux的GNU版本。
4.2 awk命令
- awk [options] ‘script’ files
- awk [option] –f scriptfile files
有3种格式:
awk ‘pattern’ filename
awk ‘{action}’ filename
awk ‘pattern {action}’
通过管道输入:
格式: command | awk ‘pattern’
command | awk ‘{action}’
command | awk ‘pattern {action}’
option选项
-F fs 指定输入文件拆分隔符,如 –F : 指用:分隔来做拆分
-v var=value 赋值一个用户定义变量
-f scriptfile 从脚本文件中读取awk命令
-mf nnn and -mr nnn 对nnn值设置内在限制,-mf选项限制分配给nnn的最大块数目;-mr选项限制记录的最大数目。这两个功能是Bell实验室版awk的扩展功能,在标准awk中不适用
Pattern
Pattern 包含以下:
- /正则表达式/
- 关系表达式
- 模式匹配表达式
- 模式
- BEGIN
- END
action
- 变量或数组赋值
- 输出命令
- 内置函数
- 控制流命令
sss sss ss aa
4.3 awk的环境变量
变量 | 描述 |
$n | 当前记录的第n个字段,字段间由FS分隔。 |
$0 | 完整的输入记录。 |
ARGC | 命令行参数的数目。 |
ARGIND | 命令行中当前文件的位置(从0开始算)。 |
ARGV | 包含命令行参数的数组。 |
CONVFMT | 数字转换格式(默认值为%.6g) |
ENVIRON | 环境变量关联数组。 |
ERRNO | 最后一个系统错误的描述。 |
FIELDWIDTHS | 字段宽度列表(用空格键分隔)。 |
FILENAME | 当前文件名。 |
FNR | 同NR,但相对于当前文件。 |
FS | 字段分隔符(默认是任何空格)。 |
IGNORECASE | 如果为真,则进行忽略大小写的匹配。 |
NF | 当前记录中的字段数。 |
NR | 当前记录数。 |
OFMT | 数字的输出格式(默认值是%.6g)。 |
OFS | 输出字段分隔符(默认值是一个空格)。 |
ORS | 输出记录分隔符(默认值是一个换行符)。 |
RLENGTH | 由match函数所匹配的字符串的长度。 |
RS | 记录分隔符(默认是一个换行符)。 |
RSTART | 由match函数所匹配的字符串的第一个位置。 |
SUBSEP | 数组下标分隔符(默认值是\034)。 |
4.4 awk运算符
运算符 | 描述 |
= += -= *= /= %= ^= **= | 赋值 |
?: | C条件表达式 |
|| | 逻辑或 |
&& | 逻辑与 |
~ ~! | 匹配正则表达式和不匹配正则表达式 |
< <= > >= != == | 关系运算符 |
空格 | 连接 |
+ - | 加,减 |
* / & | 乘,除与求余 |
+ - ! | 一元加,减和逻辑非 |
^ *** | 求幂 |
++ -- | 增加或减少,作为前缀或后缀 |
$ | 字段引用 |
in | 数组成员 |
比较表达式:
conditional expression1 ? expression2: expression3
例如:
$ awk '{max = {$1 > $3} ? $1: $3: print max}'
如果第一个域大于第三个域,$1就赋值给max,否则$3就赋值给max。
4.5 实例
· $ awk '/^(no|so)/' test-----打印所有以模式no或so开头的行。
·