a、awk与sed的区别
awk用于”比较规范“的文本处理,用于统计数量并输出字段
sed将不规范的文本,处理成”比较规范“的文本
b、awk的流程控制
输入数据前例承 BEGIN{}
主输入循环 {}
所有文件读取完成例程 END{}
c、记录和字段
每行称作AWK记录
使用空格、制表符分割开的单词称作字段
可以自定指定分割的字段
d、字段引用
awk中使用 $1 $2 …$n表示每个字段,$0代表当前行
awk ‘{print $1,$2,$2}’ filename
awk可以使用-F选型改变字段分割符
awk -F ‘{print $1,$2,$2}’ filename
分隔符可以使用正则表达式
awk ‘/^menu/{print $0}’ aa.txt
awk -F “,” ‘/^menu/{print $2}’ aa.txt
e、AWK表达式
赋值、算数、系统变量、关系操作符、布尔操作符
赋值 = ++ — += — *= /= %= ^=
系统变量
FS和OFS字段分隔符,OFS表示输出的字段分割符 (Filed Splite)
RS记录分割符 (Record Splite)
NR和FNR行数 (Number Row) FNR支持多个文件一起输出
NF字段数量,最后一个字段内容可以用$NF取出 (Number Field)
head -5 /etc/passwd | awk -F “:” ‘{print $1}’
head -5 /etc/passwd | awk ‘BEGIN{FS=”:”}{print $1}’
head -5 /etc/passwd | awk ‘BEGIN{FS=”:”}{print $1,$2}’ #输出的多个变量使用,分割
head -5 /etc/passwd | awk ‘BEGIN{FS=”:”;OFS=”-“}{print $1,$2}’ #指定字段输出OFS –
head -5 /etc/passwd | awk ‘BEGIN{RS=”:”}{print $0}’ #指定行记录分割符号为:
head -5 /etc/passwd | awk ‘{print NR}’ #输出行号
head -5 /etc/passwd | awk ‘{print NR,$0}’ #输出行号和该行记录
awk ‘{print NR,$0}’ /etc/passwd aa.txt #将多个文件合并输出
head -5 /etc/passwd | awk ‘BEGIN{FS=”:”}{print NF}’ #输出每行列数
head -5 /etc/passwd | awk ‘BEGIN{FS=”:”}{print $NF}’ #输出每行最后一个字段
g、条件语句
if(表达式) awk语句1
else awk语句2
awk ‘{if($2>=70) print $1}’ kpi.txt
i、循环
head -1 kpi.txt | awk ‘{for(c=2;c<=NF;c++) print c}’ #取第一行,从第2个列到最后一个列数,输出列号
head -1 kpi.txt | awk ‘{for(c=2;c<=NF;c++) print $c}’ #输出每列数值
head -1 kpi.txt | awk ‘{for(c=2;c<=NF;c++) sum+=$c;print sum}’ #计算总分
head -1 kpi.txt | awk ‘{for(c=2;c<=NF;c++) sum+=$c;print sum/(NF-1)}’ #计算平均分
awk ‘{sum=0; for(c=2;c<=NF;c++) sum+=$c; print $1,sum/(NF-1)}’ kpi.txt #输出每行平均分
awk ‘{sum=0; for(c=2;c<=NF;c++) sum+=$c; average[$1]=sum/(NF-1)}END{for(user in average) print user,average[user]}’ kpi.txt
g、使用awk -f 运行awk命令
awk -f kpi.awk kpi.txt
kpi.awk
{sum=0; for(c=2;c<=NF;c++) sum+=$c; average[$1]=sum/(NF-1)}END{for(user in average) print user,average[user]}
{
sum=0;
for(c=2;c<=NF;c++)
sum+=$c
avage[$1]=sum/(NF-1)
}
END{
for(user in avage)
sum_all+=avage[user]
avg_all=sum_all/NR
for(user in avage)
if(avage[user]>=avg_all)
above++
else
below++
print above,below
}
今天的文章AWK命令_awk用法详解「建议收藏」分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/54935.html