AWK文本编辑器

原理
awk是一个强大的文本分析工具,j简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
使用
命令格式
awk [-F|-f|-v] ‘BEGIN{} //{command1; command2} END{}’ file
-F:指定输入分隔符,-f:调用脚本,-v:定义变量
’ ’ 引用代码块
BEGIN 初始化代码块,在对每一行进行处理之前,初始化代码,主要是引用全局变量,设置FS分隔符
// 匹配代码块,可以是字符串或正则表达式
{} 命令代码块,包含一条或多条命令
; 多条命令使用分号分隔
END 结尾代码块,在对每一行进行处理之后再执行的代码块,主要是进行最终计算或输出结尾摘要信息
在这里插入图片描述
例:
在这里插入图片描述
BEGIN { FS=”:”;print “----header----“ } 为 BEGIN 区域,它设置了字段分界符变量 FS的值,然后打印报文头部信息。这个区域仅在 body 区域循环之前执行一次。
/root/{print $1}是 body 区域,包含一个正则模式和一个动作,即在输入文件中搜索包含关键字 root 的行,并打印第一个字段。
END {print “----footer----“ }是 END 区域,打印报文尾部信息。
/etc/passwd 是输入文件,每行记录都会执行一次 body 区域里的动作
-f :指定脚本文件
awk命令除了在命令行执行以外,还可以通过脚本执行
建立脚本script.awk
在这里插入图片描述
在/etc/passwd上执行script.awk脚本(使用-f)
在这里插入图片描述
awk脚本是由模式和操作来组成的
模式可以是以下任意一个:
1./正则表达式/: 使用通配符的扩展集,在”/” “/”这两根斜线之间的是正则表达式
2.关系表达式: 使用运算符进行操作,可以是字符串或数字的比较测试
3.模式匹配表达式: 用运算符 ~(匹配)和 ~ !(不匹配)
4.BEGIN语句块、pattern语句块、END语句块

操作由一个或多个命令、函数、表达式组成,之间由换行符或分号隔开,并位于大括号内,主要部分是 :
变量或数组赋值
输出命令
内置函数
控制流语句
在这里插入图片描述

打印命令
awk 的打印命令 print(不带任何参数)会打印整行数据。等价于”cat命令.
在这里插入图片描述

内置变量
awk -F: ‘{ print $NF }’ /etc/passwd(打印一行中最后一个字段)
在这里插入图片描述
awk -F: ‘{ print $(NF-1) }’ /etc/passwd
在这里插入图片描述
awk -F: '{ print NF } ’ /etc/passwd (总字段数)
在这里插入图片描述
awk -F : ‘{print $1,$3}’ /etc/passwd (指定列)
在这里插入图片描述

外部变量传递
在这里插入图片描述
在这里插入图片描述
//匹配代码块
//纯字符匹配 !//纯字符不匹配 ~//字段值匹配 !~//字段值不匹配 ~/a1|a2/字段值匹配a1或a2
awk -F: ‘/root/{ print $3+10 }’ /etc/passwd (匹配root)
在这里插入图片描述
awk -F: ‘$1~/alice/ && $3>8 { print }’ /etc/passwd 匹配从第一行到alice
在这里插入图片描述
运算与判断
awk -F: ‘ $ 3 >100’ /etc/passwd (第三个字段大于100)
在这里插入图片描述
awk -F: ‘ $3 >100 || $3<5 ’ /etc/passwd (第三字段大于100或小于5)
在这里插入图片描述
awk -F: ‘/root/{ print $3+10 }’ /etc/passwd (第三个字段加10)
在这里插入图片描述
awk -F: ‘/root/{ print $3-$4}’ /etc/passwd(减法)
在这里插入图片描述
awk -F: ‘$1~/alice/ && $3>8 { print }’ /etc/passwd 逻辑与,$1匹配alice,并且$3>8
在这里插入图片描述
awk -F: ‘{ if ($1~/alice/ && $3>8 ) print }’ /etc/passwd (判断)
在这里插入图片描述
awk -F: ‘$1~/alice/ || $3>8 { print }’ /etc/passwd (逻辑或)
在这里插入图片描述
输出处理结果到文件
在命令代码块中直接输出 route -n|awk ‘NR!=1{print > “./fs”}’
在这里插入图片描述
使用重定向进行输出 route -n|awk ‘NR!=1{print}’ > ./fs
在这里插入图片描述
格式化输出
awk -F:’{ print ("%s:%s\n,$1,$3")}’ /etc/passwd (输出分隔符)
printf表示格式输出
%格式化输出分隔符
s表示字符串类型
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值