如何在awk中正确解析带引号列并计算测速数据平均值?
解决方案
方案一:修改awk命令适配带引号字段
直接利用awk的FPAT变量定义字段匹配规则,让它把带引号的多词内容识别为单个字段,无需额外安装工具:
tail -10 speed.dat | awk 'BEGIN {FPAT = "([^ \"]+)|(\"[^\"]+\")"} {sum+=$7; n++} END {print sum/n}'
FPAT的规则是:要么匹配不含空格和引号的连续字符,要么匹配被双引号包裹的任意内容,这样就能正确解析带引号的字段,让第7列对应真实的下载速度数值。
方案二:用CSV工具处理(需额外安装)
因为你的数据格式符合CSV的引号转义规则(空格分隔、特殊字段用引号包裹),可以用专门的CSV工具提取字段:
- 先安装
csvkit:
sudo apt update && sudo apt install csvkit
- 提取第7列并计算平均值:
tail -10 speed.dat | csvcut -d ' ' -c 7 | awk '{sum+=$1; n++} END {print sum/n}'
选择建议
- 若只是临时处理,优先用方案一,无需额外安装软件,直接修改awk命令即可解决问题;
- 若后续经常要处理这类带引号的结构化数据,安装
csvkit或miller这类工具会更省心。
内容的提问来源于stack exchange,提问作者Gert Gottschalk
相关产品推荐
相关产品推荐

