awk技能实战
awk技能实战
数组
数组声明 declare -a
关联数组声明 declare -A
字符串
切片
查找替换
查找删除
变量赋值
awk工具
文档报告生成器,格式化文本输出
- 基本用法 awk [options] ‘program’ file
program: PATTERN{ACTION STATEMENTS},这里的PATTERN不是正则中的模式,而是内置的模式
ACTION_STATEMENTSb
expressions
Control statements
Compound statements
input statements
out statements
print print item1,item2
printf 用法print FORMAT,item1,item2
FORMAT必须给出
printf不会自动换行
FORMAT中需要为后面的每一个item指明一个格式化符号
格式符
%c,显示ASCII码%d,%i,显示十进制整数
%e,%E,科学计数法
%f,浮点数
%g,%G,科学计数法或者浮点数显示数值
%s,显示字符串
%u,无符号整数
%%,显示为%自身
修饰符
%n.n,比如%15s,表示这个变量用15个位置显示-:左对齐 0
+:显示数值的符号
操作符
算符运算操作符
x+y,x-y,x*y,x/y,x%y
-x,取负
+x,转化为数值
赋值操作符 =,+=,-=,*=,%=,%=,……=,++,–
- 比较操作符 >,>=,==,等等
模式匹配符
~,左边是否能被右侧匹配
!~
逻辑 && || !
函数调用function_name(arg1,arg2,arg3)
条件表达式 判断条件?expression:expression三元表示式
PATTERN
empty:空模式匹配每一行,不写出来就行
/regular expression/:能被此处的模式匹配到的
relation expression ,关系表达式,结果有真有假,结果为真就处理,非0为真。非空字符串表示为真。
line ranges,行范围/pat1/,/pat2/,不支持直接数字格式
BEGIN/END,BEGIN尽在开始处理文件中的文本之前执行一次,end仅仅在处理完成之后,命令结束之前执行一次。
1 | awk -F: 'BEGIN{print " name uid "}{print $1,$3}' /etc/passwd |
Notes:输出的item可以是字符串,也可以是数值,当前记录的字段,变量或awk表达式。想要变量替换,变量不能写在引号内
变量
内建变量(使用的时候不需要$)
FS,输入时分隔符,默认为空白OFS,输出时分隔符,默认为空白字符
RS,输入的换行符
ORS,输出时的换行符
NF,每一行的字段数量
NR,行数
FNR,每一个文件进行单独计数
FILENAME,当前文件名
ARGC,命令行参数个数
ARGV,数组,命令行中给定的各个参数
自定义变量
变量名一样区分大小写可以在program中直接定义,就是后面的{},多个就用分号分隔
options
-F ,指明输入时数据的字段分隔符
- -v: var=value 自定义变量