9.6/9.7 awk
一、awk简介
1. awk是一种编程语言,用于对文本和数据进行处理的
2. 具有强大的文本格式化能力
3. 利用命令awk,可以将一些文本整理成为我们想要的样子
4. 命令awk是逐行进行处理的
二、awk使用示例
- 指定分割符号进行分割:
awk -F ':' '{print $1}' passwd
-F:指定分隔符,如果不指定分隔符默认是以空格或者空白行,作为分割
$1:表示打印第一段,如果是$2就是打印第二段
多段打印:
awk -F ':' '{print $1,$3,$5}' passwd
打印全部行:
awk -F ':' '{print $0}' passwd
- awk匹配
awk '/root/' passwd
awk可以使用正则,并且自带脱意功能,不需要像grep -E 和sed -r 进行脱意
- awk匹配行,并进行分割
匹配带root的行,并打印第一、第三段
- awk也支持多个匹配,并进行分割
匹配带root的行,并打印第一、第三段
匹配带user的行,并打印第一段、第三段、第四段
awk -F ':' '/root/ {print $1,$3} /user/ {print $1,$3,$4}' passwd
- 使用正则进行打印匹配root或user行,并打印第一段
awk -F ':' '/root|user/ {print $1}' passwd
- 使用数学运算匹配
1、匹配第三段等于0的,这里可以不输入print也会默认打印。
awk -F ':' '$3==0' passwd
2、匹配第三段大于1000的并指定打印第五段
3、注意的是如果数字中使用了""号,会认为是字符串则会按ascll码进行排序
4、不等于
匹配第三段不等于4
awk -F ':' '$3 != 4 {print $4}' passwd
5、&&和||
匹配第三段大于1000,并且第六段等于/home/wxy的
awk -F ':' '$3>=1000 && $6 =="/home/wxy"' passwd
awk -F ':' '$3==1000 || $6 =="/home/wxy"' passwd
- awk 内置变量
1、输出分隔符:OFS
2、NR:显示行数
NR也可以用来做判断,比如说只打印前10行:
awk -F ':' 'NR <=10 {print NR":" $0}' passwd
3、NF:显示段数
awk -F ':' '$3 >=1000 {print NF" " $0}' passwd
- awk改变值
将第一段全部改为root
awk -F ':' '$1="root"' passwd
赋值后所有的分割符都没了,可以再使用OFS加上:
awk -F ':' '{OFS=":"} $1="root"' passwd
- awk求和
统计第三段的相加的总和
awk -F ':' '{(oto=oto+$3)};END {prin^Coto}' passwd
- awk if判断
awk -F ':' '{if($1=="root") {print $1}}' passwd