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 自定义变量