管道符号前awk中按字段计数
我试图在管道符号前awk中按字段计数,awk,Awk,我试图在之前计算文件中$2中的唯一条目: 文件 chr11:101323676-101323847 TRPC6|gc=39.2 143.1 chr11:101324359-101324478 TRPC6|gc=38.7 146.4 chr11:101325731-101325850 TRPC6|gc=32.8 84.5 chr11:101341904-101342127 TRPC6|gc=43.5 197.9 chr12:5153304-5155165 KCN
之前计算文件中$2
中的唯一条目:
文件
chr11:101323676-101323847 TRPC6|gc=39.2 143.1
chr11:101324359-101324478 TRPC6|gc=38.7 146.4
chr11:101325731-101325850 TRPC6|gc=32.8 84.5
chr11:101341904-101342127 TRPC6|gc=43.5 197.9
chr12:5153304-5155165 KCNA5|gc=65.1 633.7
chr12:52306230-52306349 ACVRL1|gc=58.8 152.4
chr12:52306868-52307149 ACVRL1|gc=66.5 309.6
chr12:52307328-52307569 ACVRL1|gc=66.8 305.9
chr12:52307743-52307872 ACVRL1|gc=64.3 267.1
所需输出
三,
尝试:
awk '{sub(/:.*/,"",$2)} !seen[$2]++{unq++} END{print unq}' file.txt
目前,我得到了一个非常不同的数字,我认为这是必要的,因为我需要在
上拆分,但不确定正确的方式。谢谢:)。你就快到了。只需将sub()中使用的正则表达式中的\\124;替换为:
:
您还可以像这样使用分隔符:
awk -F'[|]| +' '!seen[$2]++{c++}END{print c}' file
我正在使用|
或一个或多个空格作为分隔符。这样就可以以$2
的形式访问感兴趣的部分
其余部分遵循与您问题中的示例相同的逻辑:我们使用$2
作为查找表seen
中的索引,并检查此索引以前是否出现过。如果不是,我们增加计数器c
,并在最后打印c
awk
,以进行救援
$ awk '{split($2,a,"|"); c[a[1]]}
END{for(k in c) count++; print count}' file
3
或较短版本
$ awk '{split($2,a,"|"); if(!c[a[1]]++) count++}
END{print count}' file
最短的
$ awk 'split($2,a,"|") && !c[a[1]]++{u++} END{print u}' file
添加另一个子项,即sub/\\\\.*$/,“”,$0)
。祝你好运,嗯。。我还认为您需要调试您的步骤。在适当的位置添加print#dbg:$2 before=“$2
和print”#dbg$2 after=“$2
应该会有帮助。祝你好运。非常感谢大家:)
$ awk 'split($2,a,"|") && !c[a[1]]++{u++} END{print u}' file