01、Linux 三剑客之 awk
根据定位到的数据行处理其中的分段
02、awk 基本语法
awk 是 linux 下的一个命令,同时也是一种语言解析引擎
awk 具备完整的编程特性。比如执行命令,网络请求等
精通 awk,是一个 linux 工作者的必备技能
语法 awk 'pattern{action}'
03、awk 上下文变量
开始 BEGIN 结束 END
行数 NR
字段与字段数 $1 $2 .. $NF NF
整行 $0
字段分隔符 FS
输出数据的字段分隔符 OFS
记录分隔符 RS
输出字段的行分隔符 ORS
04、字段变量用法
-F 参数指定字段分隔符,可以用|指定多个- 多分隔符 -F ‘<|>’
BEGIN{FS=“_”} 也可以表示分隔符
$0 代表当前的记录
$1 代表第一个字段
$N 代表第 N 个字段
$NF 代表最后一个字段
$(NF-1) 代表倒数第二个字段
05、pattern 表达式
正则匹配 $1~/pattern/ /pattern/
比较表达式 $2>2 $1=="b"
06、awk pattern 匹配表达式案例
开始和结束 awk 'BEGIN{}END{}'
正则匹配
整行匹配 awk '/Running/'
字段匹配 awk '$2~/xxx/'
行数表达式
取第二行 awk 'NR==2'
去掉第一行 awk 'NR>1'
区间选择
awk '/aa/,/bb/'
awk '/1/,NR==2'
07、action 行为表达式 {action}
打印 {print $0} {print $2}
赋值 {$1="abc"}
处理函数
原始内容 $0
更新后内容 {$1=$1;print $0}
08、单行转多行
echo 1:2:3 | awk 'BEGIN{RS=":"}{print $0}'
1
2
3
09、多行变单行
echo '1
2
3' | awk 'BEGIN{RS="";FS="\n";OFS=":"}{$1=$1;print $0}'
1:2:3
echo '1
2
3' | awk 'BEGIN{ORS=":"}{$1=$1;print $0}'
1:2:3:
10、计算平均数
echo '1,10
2,20
3,30' | awk 'BEGIN{total=0;FS=","}{total+=$2}END{print total/NR}'
20
11、awk 的词典结构 array
array 是稀疏矩阵,类似 python 的词典类型
统计多家机构的营业额
统计多家机构的营业额平均值
echo 'a, 1, 10
a, 2, 20
a, 3, 30
b, 1, 5
b, 2, 6
b, 3, 7' | awk '{data[$1]+=$3}
END{for(k in data) print k,data[k]}'
a, 60
b, 18
echo 'a, 1, 10
a, 2, 20
a, 3, 30
b, 1, 5
b, 2, 6
b, 3, 7' | awk '{data[$1]+=$3;count[$1]+=1;}
END{for(k in data) print k,data[k]/count[k]}'
a, 20
b, 6