awk 統(tǒng)計第一列出現(xiàn)次數(shù)和以第一列進行g(shù)roup by 第二列不重復(fù)的數(shù)量

[root@test tmp]# cat /tmp/ns.log 
a 1
a 3
b 2
c 1
[root@test tmp]# awk '{appear[$1]++;if(all[$2] != 1) {all[$2]=1;sum[$1]++}else{sum[$1] = 0}}END{ for (i in appear) {print i, appear[i], sum[i]} }' /tmp/ns.log 
a 2 2
b 1 1
c 1 0

解析

要統(tǒng)計 ns.log 文件中 第一列出現(xiàn)的次數(shù),第二列中按照第一列分組在整列中沒有重復(fù)的次數(shù)。
以 ns.log 為例。
a 出現(xiàn) 2 次。a 后的 1、3 在整個第二列中沒有重復(fù),那么沒有重復(fù)數(shù)據(jù)就是 2 個。
b 出現(xiàn) 1 次。b 后的 2 在整個第二列中也沒用重復(fù),那么沒有重復(fù)的數(shù)據(jù)就是 1 個。
c 出現(xiàn) 1 次。 c 后的 1 已經(jīng)出現(xiàn)過了。那么沒有重復(fù)的數(shù)據(jù)就是 0

所以與其結(jié)果為

a 2 2
b 1 1
c 1 0

上代碼

awk '{appear[$1]++;if(all[$2] != 1) {all[$2]=1;sum[$1]++}else{sum[$1] = 0}}END{ for (i in appear) {print i, appear[i], sum[i]} }' /tmp/ns.log 

appear 記錄第一列元素出現(xiàn)的次數(shù)
all 第二列元素做 key-value 記錄
sum 記錄第一列元素對應(yīng)的第二列元素沒有出現(xiàn)在 all 中的次數(shù)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容