AWK读书笔记

时间:2023-03-08 18:13:03
AWK读书笔记

1.awk 'parttern {action}' filename

从文件中逐行读取并匹配parttern,若匹配成功执行action否则读取下一行.

parttern和action都可选,若省略parttern则对每行都执行action.BEGIN和END不能省略action.

parttern {action}语句,及action内的语句通常用换行符分隔,若干语句在同一行时用分号分隔.

左大括号{必须与parttern在同一行,右大括号}位置不限.其中的空行被忽略.

空格与制表符可以成对出现在运算符与操作数周围以提高可读性.

注释任一行.

2.当前输入行的第一个字段为$1,第二个字段为$2...当前行为$0.字段默认分隔符为空格或制表符.

3.在print语句中默认以逗号分隔表达式,{print $1,$2}

4.内置变量不需通过$引用

NF:Number of Field,每行的字段数.$NF可以表示最后一个字段值.

NR:Number of Record,到目前为止读取到的记录(行)数.

FNR:当前输入文件的记录个数.

FS:Field Separator,(输入行)字段分隔符.默认为空格.

OFS:Output Field Separator,输出行字段分隔符.默认为换行符(\n).

RS:Record Separator:输入行分隔符.默认为换行符.

ORS:Output Record Separator:输出行分隔符.默认为空格.

ARGC:命令行参数的个数.

ARGV:命令行参数数组.

FILLENAME:当前输入文件名.

OFMT:数值的输出格式,默认为%.6g

RLENGTH:被函数匹配的字符串的长度.

RSTART:被函数匹配的字符串的开始.

SUBSEP:下标分隔符.默认为\034.

5.parttern汇总

BEGIN {action}:在输入行被读取之前执行action一次.

END {action}:在输入行读取完成之后执行action一次.

expression {action}:若expression为真则输入行执行action,否则跳过.

/regexpr/ {action}:若输入行匹配正则表达式则执行action,否则跳过.

compexpr {action}:若复合表达式(由&&、||、!、())为真则输入行执行action,否则跳过.

parttern1,parttern2 {action}:对匹配parttern1开始到匹配parttern2结束的其间所有行(含这两行)执行action.若parttern2未匹配则从parttern1到末行执行action.

BEGIN和END不与其他模式组合,一个范围模式不能是其他模式的一部分.

6.BEGIN常用来更改FS,或打印标题.END用来输出计算结果.

7.比较运算符

< 小于

<= 小于等于

== 等于

!= 不等于

大于

= 大于等于

~ 匹配

!~ 不匹配

8.字符串匹配模式:测试一个字符串是否包含一段可以被正则表达式匹配的子字符串.

/regexpr/:当前输入行包含一段能够被rexexpr匹配的子字符串时该模式被匹配.

expression ~ /regexpr/:若expression的字符串值包含一段能被rexexpr匹配的子字符串时该模式被匹配.

expression !~ /regexpr/:若expression的字符串值不包含一段能被rexexpr匹配的子字符串时该模式被匹配.

9.action汇总

expression:常量,变量,赋值,函数调用等

print expression-list

printf(format,expression-list)

if (expression) statements

if (expression) statements else statements

for (expression1;expression2;expression3) statements

for (expression in array) statements

while (expression) statements

do statements while (expression)

break

continue

10.内建算术函数--P36未完待续