Awk语法格式:
$awk 'awk程序'数据文件文件名1数据文件文件名2
…
Awk程序结构:
Pattern{Action}
如果没有Pattern表示无条件执行Action。
Pattern运算符:>, <, >=, <=, ==, !=,~,!~
Pattern保留字:BEGIN,END。分别表示程序开始之前和结束之前执行一次。
Awk字段变量
字段变量 | 含义 |
$0 | 一字符串,其内容为目前awk所读入的数据行. |
$1 | $0上第一个字段的数据. |
$2 | $0上第二个字段的数据. |
... | 其余类推 |
awk的工作流程:
执行awk时,它会反复进行下列四步骤.
- 自动从指定的数据文件中读取一个数据行.
- 自动更新(Update)相关的内建变量之值.如: NF, NR, $0...
- 依次执行程序中
所有 的Pattern { Actions }指令.
- 当执行完程序中所有Pattern { Actions }时,若数据文件中还有未读取的数据,则反复执行步骤1到步骤4.
将程序部分储存于文件awk文件中,执行命令时指定awk程序文件,这是执行awk的另一种方式,特别适用于程序较大的情况,其语法如下:
$ awk -f awk程序文件名
数据文件文件名
可使用"-f"参数,让awk主程序使用“其它仅含awk函数的文件中的函数”
其语法如下:
$ awk -f awk主程序文件名-f awk函数文件名 数据文件文件名
awk中如何利用系统资源
[a.语法]awk output指令| "Shell接受的命令"
[b.语法]"Shell接受的命令" | awk input指令
注: awk input指令只有getline一个.
awk output指令有print, printf()二个.
getline指令语法:
语法 | 由何处读取数据 | 数据读入后置于 |
getline var < file | 所指定的file | 变量var(var省略时,表示置于$0) |
getline var | pipe变量 | 变量var(var省略时,表示置于$0) |
getline var | 见
注一 | 变量var(var省略时,表示置于$0) |
注一:当Pattern为BEGIN或END时, getline将由stdin读取数据,否则由awk正处理的数据文件上读取数据.
getline一次读取一行数据,若读取成功则return 1,若读取失败则return -1,若遇到文件结束(EOF),则return 0;
awk中数组
for(下标in Number){....}
字符串可以做下标,使用上面语法读出数组数据。
Awk中的重定向:
1.程序中>表示累积结果。
2.和>>的不同之处为,如果系统中本来有个结果文件,>第一次执行会重写,第二次执行会追加,>>第一次执行会继续追加。
Awk内建变量:
NF:为一整数,其值表$0上所存在的字段数目.
NR(FNR):为一整数,其值表awk已读入的数据行数目.
FILENAME:正在处理的数据文件文件名.
FS(OFS):分隔符
RS(ORS):换行符
ARGC:参数个数(包括命令本身)
ARGV[no.]:参数数组,从0开始,例如ARGV[0]等于“awk”。
RSTART:执行match函数后,合条件的子字串在原字串中的位置.值为0表示未找到合条件的子字串.
RLENGTH:执行match函数后,合条件的子字串长度.值为-1表示若未找到合条件的子字串.
正则表达式组成元素:除了 . * [ ] + ? ( ) \ ^ $
外之所有字符,如果遇到这几种字符,需要前面加上\表示转义字符。