zoukankan      html  css  js  c++  java
  • awk结合正则匹配

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

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

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

    因为行内包含换行符的项会被分成多行(例如上面的第3,4行),所以需要结合正则匹配

    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库对csv格式的文件做统计也很方便.

    用pandas读取数据:

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

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

  • 相关阅读:
    2019春第八周作业
    2019春第七周作业
    第六周作业
    币值转换
    打印沙漏
    秋季学期学习总结
    人生影响最大的三位老师
    自我介绍
    2018秋季学习总结
    自己
  • 原文地址:https://www.cnblogs.com/bymo/p/7246353.html
Copyright © 2011-2022 走看看