Awk 计算单个行上字段的出现次数

Awk 计算单个行上字段的出现次数,awk,field,counting,Awk,Field,Counting,我试图获取一个有1000多行的文件,对于每一行,我想计算各个字段出现的次数。因此,文件中几行的示例如下所示: 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/0 1/1 0/0 0/1 0/1 1/1 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 我的代码是: cat

我试图获取一个有1000多行的文件,对于每一行,我想计算各个字段出现的次数。因此,文件中几行的示例如下所示:

0/0     0/0     0/0     0/0     0/0     0/0     0/1     0/0     0/0     1/1     0/0     0/1
0/1     1/1     0/1     0/0     0/0     0/0     0/0     0/0     0/0     0/0     0/0     0/0
我的代码是:

cat file | awk 'BEGIN{a=0; c=0; g=0;} {a+=gsub("0/0",""); c+=gsub("0/1",""); g+=gsub("1/1","")} END{print a,c,g}'
我得到的输出是:
18 4 2

我想要的输出是:

    line #1- 9 2 1
    line #2- 9 2 1

我似乎不知道我用
GNU awk
做错了什么(输出可以是随机的。因为你没有提到你想要的顺序,我假设这应该可以):


awk'{delete a;printf“line#%s-”,NR;for(x=1;xuseless使用
cat
file
应该是
awk
的参数。我必须承认,我没有得到问题的剩余部分,也许我不清楚。我想做的是在我的文件中(此处标记为file,因此为cat,并理解不需要这样做),有这些“0/0,0/1,1/1”字符串。对于每一行,我想计算每一行的出现次数。我的awk行似乎将所有行合并为1,而没有将其分开。如果有
1/0
?我知道在我的数据集中,只有3种可能性:0/0,0/1和1/1。@user1352084明白了。我没有想到这一点并采用了一种更通用的方法来覆盖所有场景。很高兴这对您有效。
awk '{delete a; printf "line #%s- ", NR; for(x=1;x<=NF;x++) a[$x]++; for(y in a) printf "%s ", a[y]; print ""}' file
$ cat file
0/0     0/0     0/0     0/0     0/0     0/0     0/1     0/0     0/0     1/1     0/0     0/1
0/1     1/1     0/1     0/0     0/0     0/0     0/0     0/0     0/0     0/0     0/0     0/0
$ awk '{delete a; printf "line #%s- ", NR; for(x=1;x<=NF;x++) a[$x]++; for(y in a) printf "%s ", a[y]; print ""}' file
line #1- 9 2 1 
line #2- 9 2 1 
awk '{print "line #", NR, "-", gsub("0/0",""), gsub("0/1",""), gsub("1/1","")}' file