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()方法统计序列所有元素出现次数,并进行倒序.

  • 相关阅读:
    loj#6433. 「PKUSC2018」最大前缀和(状压dp)
    PKUWC2019游记
    10. Regular Expression Matching
    9. Palindrome Number
    8. String to Integer (atoi)
    7. Reverse Integer
    6. ZigZag Conversion
    5. Longest Palindromic Substring
    4. Median of Two Sorted Arrays
    3. Longest Substring Without Repeating Characters
  • 原文地址:https://www.cnblogs.com/bymo/p/7246353.html
Copyright © 2011-2022 走看看