一、awk简介
awk:根据定位到的数据进行分段
awk是Linux下的一个命令,同时也是一种语言解析引擎
awk具备完整的编程特性,比如执行命令,网络请求
精通awk,是Linux工作者的必备技能
二、awk基本语法
- 语法:awk ‘pattern{action}’
2.1 awk上下文变量
- 开始BEGIN介绍END
- 行数NR
- 字段与字段数$1,$2,…$NF NF
- 整行$0
- 字段分隔符FS
- 输出数据的字段分割符OFS
- 记录分割符RS
- 输出字段的行分割符ORS
2.2字段变量用法
- -F参数指定字段分隔符,也可以使用|指定多个-多分隔符-F’<|>
- BEGIN{FS=“_”}也可以表示分隔符
- $0表示当前字段
- $1表示第一个字段
- $N表示第n个字段
- $NF表示最后一个字段
- $(NF-1)表示倒数第二个字段
2.3 pattern表达式
- 正则匹配$1~/pattern/ /pattern/
- 比较表达式 $2>2 $1== “b”
2.4 awk pattern匹配表达式案例
- 开始和介绍:awk ‘BEGIN{} END{}’
- 正则匹配:
- 整行匹配:awk ‘/running/’
- 字段匹配:awk ‘$2~/xxx/’
- 行数表达式
- 取第二行:awk ‘NR==2’
- 去掉第一行:awk ‘NR>1’
- 区间选择
- awk ‘/aa/,/bb/’
- awk ‘/1/,NR==2’
2.5 行为表达式{action}
- 打印:{print $0}{print $2}
- 赋值:{$1=“abc”}
- 处理函数
- 原始内容:$0
- 更新后内容:{$1=$1;print $0}
案例
- 单行转多行:echo 1:2:3 | awk ‘BEGIN{RS=“:”}{print $0}’
- 多行变单行:
echo ‘1
2
3’ | awk ‘BEGIN{RS=“”;FS=“\n”;OFS=“:”}{$1=$1;print $0}’
- 计算平均数
awk ‘BEGIN{total=0;FS=", "}{total+=$3}END{print total/NR}’
三、awk的词典结构array
awk是稀疏矩阵,类似于Python的字典结构
官网地址: The GNU Awk User’s Guide