Linux如何使用Awk处理报表_Linux下字段提取与数据统计实战【指南】
发布时间 - 2025-12-30 00:00:00 点击率:次Awk是Linux中用于字段提取与数据统计的高效命令行工具,支持按列提取、条件过滤统计、数值计算、多字段分组及格式化输出。
如果您需要从Linux系统中的文本报表中提取特定字段或进行数据统计,则Awk是内置且高效的命令行工具。以下是针对字段提取与数据统计的多种实用方法:
一、按列提取指定字段
Awk默认以空白字符(空格、制表符)为分隔符,通过$N可直接引用第N列内容,适用于结构化日志或CSV格式报表。
1、提取文件中每行的第2列和第4列,以制表符分隔输出:
awk '{print $2, $4}' report.txt
2、提取以冒号为分隔符的/etc/passwd中用户名(第1列)和用户ID(第3列):
awk -F ':' '{print $1, $3}' /etc/passwd
3、仅显示第5列非空的行:
awk '$5 != "" {print $0}' report.txt
二、条件过滤后统计频次
结合模式匹配与计数变量,可快速统计某字段值出现次数,适用于日志分析或销售报表分类汇总。
1、统计access.log中HTTP状态码为404的请求数量:
awk '$9 == "404" {count++} END {print count+0}' access.log
2、统计report.csv中第3列(部门名称)各值出现频次:
awk -F ',' '{dept[$3]++} END {for (d in dept) print d, dept[d]}' report.csv
3、仅输出出现次数大于5的部门:
awk -F ',' '{dept[$3]++} END {for (d in dept) if (dept[d] > 5) print d, dept[d]}' report.csv
三、数值字段求和与平均值计算
Awk支持算术运算,适合对数字型字段(如销售额、响应时间)执行累加、均值等聚合操作。
1、计算sales.txt中第2列(金额)的总和:
awk '{sum += } END {print sum+0}' sales.txt
2、计算第2列的平均值(自动处理空行和非数字行):
awk '$2 ~ /^[0-9.]+$/ {sum += $2; count++} END {if (count > 0) print sum/count}' sales.txt
3、同时输出总和、计数、平均值,用制表符分隔:
awk '$2 ~ /^[0-9.]+$/ {sum += $2; count++} END {print sum, count, (count>0 ? sum/count : 0)}' sales.txt
四、多字段组合分组统计
利用复合键(如$1,$2)作为数组下标,可实现按多个维度分组聚合,适用于订单
报表中“地区+产品类型”的交叉统计。
1、按第1列(省份)和第3列(产品类别)统计数量:
awk '{key = $1 "," $3; cnt[key]++} END {for (k in cnt) print k, cnt[k]}' order_report.txt
2、在组合键基础上附加第4列(销售额)求和:
awk '{key = $1 "," $3; cnt[key]++; sum[key] += $4} END {for (k in cnt) print k, cnt[k], sum[k]}' order_report.txt
3、仅输出销售额总和超过10000的组合:
awk '{key = $1 "," $3; sum[key] += $4} END {for (k in sum) if (sum[k] > 10000) print k, sum[k]}' order_report.txt
五、格式化输出报表结果
通过printf可控制字段对齐、小数位数及分隔符样式,使统计结果更符合正式报表要求。
1、将统计结果按左对齐15字符、右对齐8字符格式输出:
awk '{cnt[$1]++} END {for (k in cnt) printf "%-15s %8d\n", k, cnt[k]}' log.txt
2、金额列保留两位小数并添加美元符号:
awk '{printf "%-10s $%.2f\n", $1, $2}' financial.txt
3、添加表头,并用等号线分隔:
awk 'BEGIN {printf "%-12s %-8s %-10s\n", "Region", "Count", "Total"; printf "%s\n", "===================================="} {sum[$1] += $3; cnt[$1]++} END {for (r in cnt) printf "%-12s %-8d $%.2f\n", r, cnt[r], sum[r]}' data.txt
# linux
# access
# 工具
# csv
# linux系统
# 状态码
# 格式化输出
# print
# if
# count
# for
# printf
# http
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
HTML5空格和nbsp有啥关系_nbsp的作用及使用场景【说明】
如何登录建站主机?访问步骤全解析
Win11摄像头无法使用怎么办_Win11相机隐私权限开启教程【详解】
Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制
jQuery 常见小例汇总
如何确保西部建站助手FTP传输的安全性?
javascript和jQuery中的AJAX技术详解【包含AJAX各种跨域技术】
Laravel怎么发送邮件_Laravel Mail类SMTP配置教程
详解jQuery中的事件
微信小程序 wx.uploadFile无法上传解决办法
Laravel怎么实现搜索高亮功能_Laravel结合Scout与Algolia全文检索【实战】
如何快速辨别茅台真假?关键步骤解析
如何在建站之星绑定自定义域名?
大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?
Android滚轮选择时间控件使用详解
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?
Laravel怎么实现搜索功能_Laravel使用Eloquent实现模糊查询与多条件搜索【实例】
如何在建站宝盒中设置产品搜索功能?
高端建站三要素:定制模板、企业官网与响应式设计优化
如何在云主机上快速搭建网站?
如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体
Laravel怎么进行浏览器测试_Laravel Dusk自动化浏览器测试入门
Laravel如何使用Gate和Policy进行权限控制_Laravel权限判定与策略规则配置
Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程
javascript如何操作浏览器历史记录_怎样实现无刷新导航
Laravel怎么清理缓存_Laravel optimize clear命令详解
如何自定义建站之星模板颜色并下载新样式?
大连 网站制作,大连天途有线官网?
PHP正则匹配日期和时间(时间戳转换)的实例代码
免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?
如何在服务器上三步完成建站并提升流量?
Laravel如何实现用户注册和登录?(Auth脚手架指南)
如何快速生成橙子建站落地页链接?
如何为不同团队 ID 动态生成多个独立按钮
JavaScript如何实现倒计时_时间函数如何精确控制
南京网站制作费用,南京远驱官方网站?
手机软键盘弹出时影响布局的解决方法
打造顶配客厅影院,这份100寸电视推荐名单请查收
三星、SK海力士获美批准:可向中国出口芯片制造设备
详解Huffman编码算法之Java实现
广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?
简历没回改:利用AI润色让你的文字更专业
如何在阿里云虚拟服务器快速搭建网站?
音响网站制作视频教程,隆霸音响官方网站?
如何在香港服务器上快速搭建免备案网站?
如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南
英语简历制作免费网站推荐,如何将简历翻译成英文?
如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?
Python文件操作最佳实践_稳定性说明【指导】

