awk是报告生成器

awk是原作者:aho,Weinberger,Kernighan三个人首字母的缩写

awk是指向gawk的符号链接

 

awk是独立的编程语言,

模式:类似地址定界

$0表示整个一行

$1$2$3$4,表示每个由空格分开的单位

9月15日awk小结_blank

-F char 是分隔符

awk [选项] ‘program’ file

awk [选项] ‘pattern{action}’ file

 

支持变量:

内置变量,自定义变量

内置变量:

      FS:输入时字段分隔符

9月15日awk小结_blank_02

      Rs:输入时行分隔符

9月15日awk小结_blank_03 

      OFS:输出时字段分隔符

9月15日awk小结_blank_04

      ORS:输出时行分隔符

9月15日awk小结_blank_05 

      NF:一个行里的字段数

9月15日awk小结_blank_06

      NR:文件里的行数

9月15日awk小结_blank_07

      FNR:显示每个文件的行号

9月15日awk小结_blank_08

awk –F: ‘{print $1,$NF}’ /etc/passwdd等同于下边的命令

awk –v FS=: ‘{print $1,$NF}’ /etc/passwd



 

自定义变量

9月15日awk小结_blank_09

printf命令:

printf format,item1,item2

format的可选项:

    %c:显示字符的ASCII码

    %d,%i:显示十进制

    %e,%E:科学技术法显示数值

    %f:显示字符串

    %g,%G:以科学技术法格式或浮点数格式显示数值

    %s:显示字符串

    %u:显示无符号整数

    %%:显示%自身

修饰符:

    #:宽度

    -左对齐

    +显示数值符号

    .#取精度值

9月15日awk小结_blank_10

注意 : print不会显示出%d的含义,只会显示字符

算术运算:+,-,*,/,+=,-=,*=,/=

如果自身是=,要写成/=/

比较操作符:

<

<=

>

>=

==

!=

~左边字符串能匹配右边模式为真

!~对上一个命令取反

三目操作符:

9月15日awk小结_blank_11

 

pattern,模式:

1、正则:/pattern/

9月15日awk小结_blank_12

2、表达式:

9月15日awk小结_blank_13

3、行范围,地址定界startline endline等,用NR来做判断

9月15日awk小结_blank_14

4、BEGIN/END特殊模式,表示之前(BEGIN)或之后(END)运行1次

9月15日awk小结_blank_15

5、空模式,匹配任意行,默认模式

action

     1、表达式

     2、控制语句 if-else,

if(条件){then body}else{else body}

9月15日awk小结_blank_16

do-while

9月15日awk小结_blank_17

死循环啦。

while

9月15日awk小结_blank_18

for

9月15日awk小结_blank_19

case

     3、组合语句

     4、输入语句

     5、输出语句print,printf

 

循环控制:break,continue,next

next,提前进入对下一行的处理!!

 

数组:

传统数组:索引从1开始

关联数组

for(var in array),array是索引

9月15日awk小结_blank_20

9月15日awk小结_blank_21

这个用法很常用,统计同一字段的不同名称的数量

 

内置函数:

length(string),求string长度

split(目标字符串,分隔后存放位置,分隔符)分隔字符串

substr取子串