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()方法統計序列所有元素出現次數,並進行倒序.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM