我需要 awk 的帮助

I need help on awk

一次查询需要AWK相关帮助

具有此列的 csv

m1|1|0|1
m1|2|1|1
m1|3|1|1
m2|1|0|1
m2|2|0|1
m2|1|1|1
m3|1|0|1
m3|2|1|1

愿望输出

tag|total_count|no1_repetead_in b column|no2_repeated_in b column |no3_repeated_in b column|count_of_c_column|count_of_d_column
m1|3|1|1|1|2|3
m2|3|2|1|0|1|3
m3|2|1|1|0|1|2

任何人都可以在 awk 中提供帮助

awk -F '|' '{c[]++;a[]+=;b[]+=;d[]+=if(=="1")}END{for(i in a)print i"|"c[i]"|"a[i]"|"b[i]"|"d[i]|"sort"}'  /tmp/csv.txt >> desire_output.txt

根据你的列名和你想要的输出,你可以试试这个:

awk 'BEGIN{FS=OFS="|"}{c[]++;a[]+=;b[]+=}=="1"{d[]++}=="2"{e[]++}=="3"{f[]++}END{for(i in a)print i,c[i],d[i]+0,e[i]+0,f[i]+0,a[i]+0,b[i]+0}' csv.txt

或者只是为了更好的阅读:

awk 'BEGIN{FS=OFS="|"}
{c[]++;a[]+=;b[]+=}
=="1"{d[]++}
=="2"{e[]++}
=="3"{f[]++}
END{for(i in a)
print i,c[i],d[i]+0,e[i]+0,f[i]+0,a[i]+0,b[i]+0}
' csv.txt

基于您自己的代码,修复了错误。

$ awk 'BEGIN {FS=OFS="|"}
             {k=; c[k]++; c2[k,]++; c3[k]+=(==1); c4[k]+=(==1)}
       END   {for(k in c)
                print k,c[k],c2[k,1]+0,c2[k,2]+0,c2[k,3]+0,c3[k],c4[k]}' file

m1|3|1|1|1|2|3
m2|3|2|1|0|1|3
m3|2|1|1|0|1|2

只计算第 3 和第 4 列中的“1”