awk思维导图
2021-04-05 20:55:24 1 举报
AI智能生成
awk思维导图
作者其他创作
大纲/内容
用途
报告生成器
生成报表、表格
将文本格式化为想要的报表
对文本进行较复杂的处理
实现
gwk(常用)
nwk(新实现)
定位
脚本语言解释器
一种编程语言,进行文本复杂格式处理
命令格式
通用格式:awk [options] 'Pattern{Action}' file
多模式:awk [options] 'Pattern1{Action1} Pattern2{Action2} ...' file1 file2 ...
运行机制
默认行分隔符:\"\\",列分隔符:\"空格\"(可更改)
默认:满足模式Pattern条件的文本,逐行进行处理,常用行为:print、printf
特殊模式(执行一次):BEGIN、END
内置变量
获取:文件名、行号、列值等
流程
if、while、三元表达式等
内置函数
进行函数处理
options
对变量赋值等,如\"-v FS='.'\"来更改行分隔符
默认值
布尔判断:\"0\"或\"空字符串\"表示假;\"非0\"或\"非空字符串\"表示真
“非空字符串”和“空字符”在参与数字运算时,均被当做0
当对一个不存在的元素进行自加后,这个元素就变成了自加的次数
计算函数
int
截取数字整数部分的值(向下取整)
如:awk 'BEGIN{print int(1.23)}'
rand
srand
生成随机数
如:awk 'BEGIN{srand();print rand()}'awk 'BEGIN{srand();print int(100*rand())}'
字符串函数
gsub
指定范围内的全局替换
如:awk '{gsub(\"a\
sub
指定范围内的单次替换
如:awk '{sub(\"a\
length
获取字符串长度
如:awk 'BEGIN{print length(\"张三\")}'
index
获取查询字符串在整个字符串的位置
如:awk 'BEGIN{print index(\"张三\
split
拆分字符串为数组
如:awk -v str=\
其他函数
待补充
awk使用
变量
行分隔符使用方式,同“列分隔符”
NR(Number of Records):当前处理的文本行的行号
访问多个文件时,如每个文件都有匹配内容,所有文件行号会一起计数,如:1,2,3,4
FNR(File Number of Records):各文件分别计数的行号
访问多个文件时,如每个文件都有匹配内容,每个文件行号分别计数,如:1,2,1,2
FS(Field Separator):输入列分隔符,默认\"空格\"
输入列分隔符变量:FS(Field Separator),读取文件时使用,将每一行文本分隔成列
格式:\"-F分隔符\"如:\"awk -F. '{print $1}'\",指定分隔符为\".\",输出第1列
格式:\"-v FS='分隔符'\"如:\"awk -v FS='.' '{print $1}'\",指定输入分隔符为\".\",输出第1列
OFS(Out Field Separator):输出列分隔符,默认\"空格\"
输出列分隔符变量:OFS(Out Field Separator),输出结果时使用,将每一行输出结果分隔成列
格式:\"-v OFS='分隔符'\"如:\"font color=\"#0076b3\
RS(Record Separator):输入行分隔符,默认\"\\"
输入行分隔符变量:RS(Row Separator)读取文件时使用,将文本内容,分隔成行
ORS(Output Record Separator):输出行分隔符,默认\"\\"
输入行分隔符变量:ORS(Row Separator)输出结果时使用,将输出结果行进行分隔
FILENAME:显示内容对应文件名
如数据来源为“通道”,则输出为:\"-\"
ARGC:命令行参数的个数
ARGV:数组,保存的是命令行所给定的各参数。所有参数组成的数组(ARGV[0]是awk,'pattern{ action }'不是参数)
NF(Number of Fields):行的列数
列变量
$0:整行
$1:第1列$2:第2列......
$NF:最后1行$(NF-1):倒数第2行......
自定义变量
参数options中定义
-v varname=value
如:awk -v myVar=\"myValue\" '{print myVar}' file
优点:可以引用shell中变量。如:echo shellVar = \"shell value\"awk -v myVar=shellVar '{print myVar}' file
'Pattern{Action}'中直接使用
如:awk '{myVar=\"myValue\";print myVar}' file
Pattern模式(即执行条件,满足条件的被执行)
空模式{Action}
无条件。如“{print $0}”
所有行都执行后面的动作
条件模式Pattern{Action}
自定义条件,如\"NR>1{print $0}\"满足条件Pattern的行执行后面的动作
支持关系运算符
【普通】:<、<=、>、>=、==、!=
【变量正则为真】:\"~\",如:x ~ /正则/
【变量正则不为真】:\"!~\",如:x !~ /正则/
BEGIN/END模式
BEGIN:处理文本之前进行的操作
用途:如打印表头awk 'BEGIN{print \"大小\
END:处理完所有行之后的操作
用途:如进行汇总信息输出awk '{sum++} END{printf \"文件总数:%s\
正则模式
格式:awk '/正则exp/{Action}'
如: awk '/西游记/{print $0}' file
范围:满足正则表达式的所有行,执行后面的操作
行范围模式
格式:font color=\"#c41230\
如:font color=\"#0076b3\
范围:[满足正则表达式1的第一行~满足正则表达式2第一行],闭区间内的所有行,执行后面的操作
Action动作
【定位】:对行内容进行处理
【命令分隔方式】最外面的'{}'为固定写法
\";\"分号
如:awk '{print $1;print $2}' file
\"{xxx}{xxx}\"大括号
如:awk '{{print $1}{print $2}}' file
条件判断
【语法】if(条件1){xxx}else if(条件2){xxx}else{xxx}
如awk '{if(NR==1){print \"第一行\"}else if(NR==2){print \"第二行\"}else{print \"其他行\"} }' file
循环控制支持break、continue
for(初始化;布尔判断;变更){xxx}
如: awk 'BEGIN{for(i=0;i<3;i++){print $0}}'
for(变量 in 数组){xxx}
while(布尔表达式){xxx}
如:awk -v i=1 'BEGIN{while(i<=3){print i;i++}}'
do{xxx}while(布尔表达式)
如:awk -v i=1 'BEGIN{do{print i;i++}while(i<=3)}'
三元运算符
表达式?true时执行:false时执行
如:awk '{NR==1?count+=0:count++}END{print count}' file
结束动作
exit结束awk命令(除了END模式)
ext结束当前awk内除了END模式外的所有动作,如果有END模式,则跳出所有模式的动作,执行END模式
如:awk '{if(NR==3){exit}else{print $0}} END{print \"END模式\"}' file
next结束当前行
awk是一行行处理数据的,next结束当前正在处理的行,直接进入到下一行进行处理
输出
内置输出:print
实现简单的文本输出,不能对文本进行格式化末尾自带换行
格式化输出:printf
可以对文本进行格式化输出支持格式替换符(如%s替代字符串)末尾不带换行
指定的格式和列之间,需要用\
如:awk '{printf \"第1列:%s,第2列:%s\\
格式替换符的数量必须和参数的数量一致
0 条评论
回复 删除
下一页