Linux使用 -- awk
awk sed
- awk更像是脚本语言
- awk:用于比较规范的文本处理,用于统计数量并输出指定字段
- sed:用于将不规范的文本,处理为比较规范的文本
控制流程
- 输入数据前例程**
BEGIN{}
** - 主输入循环**
{}
** - 所有文件读取完成例程**
END{}
**
记录和字段
- 每行称为AWK的记录
- 使用分隔符(可以自定义,默认是空格和制表符)分隔开的单词称为字段
字段的引用
$1 $2 ... $n
:表示每一个字段-F
:自定义分隔符,可以使用正则表达式
1 | [root@localhost ~]# awk -F"'" '/^menu/{print $2}' /boot/grub2/grub.cfg |
表达式
- 赋值操作符
var1 = 'name'
var2 = 'hello' 'world'
var3 = $1
++ -- += -= *= /= %= ^=
- 算数操作符
+ - * / % ^
- 系统变量
FS
和OFS
:字段分隔符,OFS
表示输出的字段分隔符RS
:记录分隔符(默认是换行符)NR
和FNR
:行数NF
:字段数量,最后一个字段内容可以用$NF
取出
- 关系操作符
< > <= >= == != ~ !~
- 布尔操作符
&& || !
1 | [root@localhost ~]# head -5 /etc/passwd |
1 | [root@localhost ~]# head -5 /etc/passwd | awk '{print NR,$0}' |
1 | [root@localhost ~]# head -5 /etc/passwd | awk 'BEGIN{FS=":"}{print NF}' |
条件和循环
条件
1 | if(表达式) |
1 | [root@localhost ~]# cat kpi.txt |
循环
1 | while(表达式) |
1 | [root@localhost ~]# cat kpi.txt |
数组
数组的定义
- 数组:一组有某种关联的数据(变量),通过下标依次访问
数组名[下标]=值
- 下标可以使用数字,也可以使用字符串
数组的遍历
for (变量 in 数组名)
- 使用
数组名[变量]
的方式依次对每个数组的元素进行操作
- 使用
删除数组
delete 数组名
delete 数组名[下标]
命令行参数数组
- ARGC
- ARGV
样例
1 | [root@localhost ~]# cat kpi.txt |
1 | [root@localhost ~]# cat avg.awk |
1 | [root@localhost ~]# cat arg.awk |
1 | [root@localhost ~]# cat result.awk |
函数
算术函数
sin() cos()
int()
rand() srand()
1 | [root@localhost ~]# awk 'BEGIN{pi=3.14;print int(pi)}' |
字符串函数
gsub(r,s,t)
index(s,t)
length(s)
match(s,r)
split(s,a,sep)
sub(r,s,t)
substr(s,p,n)
自定义函数
1 | function 函数名 (参数) { |
1 | [root@localhost ~]# awk 'function a() {return 0} BEGIN{print a()}' |
参考资料
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.