我有这个输入文件(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
但那不起作用。
我如何获得输出?
答案 0 :(得分:3)
只是为了让你知道这个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
您可以格式化所需的输出方式。
答案 1 :(得分:1)
你可以尝试
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]
}
}
答案 2 :(得分:1)
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
答案 3 :(得分:1)
以下是使用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加起来就可以得到命中数。
答案 4 :(得分:1)
awk '
{ repeats[$1]++; counts[$1,$2]++ }
END {
for (key in repeats)
print key, repeats[key], counts[key,1]+0, counts[key,0]+0
}
' file