如何输出有效/无效input列表的计数?

我有这个input文件(1 =有效,0 =无效)

a 1 a 0 b 1 b 1 b 0 c 0 c 0 c 0 c 0 . . . 

并想要这样的输出:

  X repeats active count inactive count a 2 times 1 1 b 3 times 2 1 c 4 times 0 4 

我试过了:

 awk -F "," '{if ($2==1) a[$1]++; } END { for (i in a); print i, a[i] }'file name 

但是这没有用。
我怎样才能得到输出?

只是为了给你一个这个AWK应该工作的想法:

 awk '$2{a[$1]++; next} {b[$1]++; if (!($1 in a)) a[$1]=0} END{for (i in a) print i, a[i], b[i], (a[i]+b[i])}' file a 1 1 2 b 2 1 3 c 0 4 4 

你可以格式化你想要的输出方式。

你可以试试

 awk -f r.awk input.txt 

input.awk是你的数据文件, r.awk

 { X[$1]++ if ($2) a[$1]++ else ia[$1]++ } END { printf "X\tRepeat\tActive\tInactive\n" for (i in X) { printf "%s\t%d\t%d\t%d\n", i, X[i], a[i], ia[i] } } 

这是GNU awk

 awk '{a[$1]++; if ($2!=0) {b[$1]++;c[$1]+=0} else {c[$1]++;b[$1]+=0}}END {for (i in a) print i, a[i], b[i], c[i]}' file 

这是用awk做的另一个简单的方法

 awk '{a[$1]++;b[$1]+=$2} END { for (i in a) print i,a[i],b[i],a[i]-b[i]}' file a 2 1 1 b 3 2 1 c 4 0 4 

没有测试是必要的,只是总结列$ 2,这给点击次数。

 awk ' { repeats[$1]++; counts[$1,$2]++ } END { for (key in repeats) print key, repeats[key], counts[key,1]+0, counts[key,0]+0 } ' file