awk结合正则匹配

利用awk分析data.csv中label列各取值的分布.spa

在终端执行head data.csv查看数据:code

1 name,business,label,label_name
2 沧州光松房屋拆迁有限公司,旧房拆迁、改造;物业服务(依法须经批准的项目,经相关部门批准后方可开展经营活动),E4,建筑装饰和其余建筑业
3 上海托帕化工材料有限公司,"从事化工材料领域内的技术开发、技术转让、技术咨询、技术服务、化工原材料及产品(除危险化学品、监控化学品、烟花爆竹、易制毒化学品、民用爆炸物品)、机械设备、电子产品、橡塑制品、机电设备、五金建材、日用百货的销售,从事货物及技术的进出口业务。
4 【依法须经批准的项目,经相关部门批准后方可开展经营活动】",F2,零售业
5 上海利昂节能灯具备限公司,节能灯管,节能灯配件,电子镇流器,灯具,电子产品,生产,加工,C26,电气机械和器材制造业
6 裕福支付有限公司海南分公司,"企业管理咨询,计算机数据处理,应用软件技术服务,会议服务,经济信息咨询",L2,商务服务业
7 龙川县联生农贸市场管理中心,自建农贸市场管理服务,L2,商务服务业

 

由于行内包含换行符的项会被分红多行(例如上面的第3,4行),因此须要结合正则匹配blog

cat data.csv | awk -F ',' '{if(NF>2 && $(NF-1)~/^[A-Z][0-9]/) {print $(NF-1)}}' | sort | uniq -c | sort -n -r > label_distribution.txt

-F ',' 表示根据逗号分隔;开发

$(NF-1)~/^[A-Z][0-9]/ 表示分隔后的倒数第二项(在此指取label列的值)需知足指定的正则匹配规则pandas

 

另外,利用Pandas库对csv格式的文件作统计也很方便.产品

用pandas读取数据:io

 

print df.label.value_counts()
"""
F1     622844
L2     614734
F2     493420
A1     102186
...
"""

value_counts()方法统计序列全部元素出现次数,并进行倒序.class

相关文章
相关标签/搜索