awk输出字段中文本的唯一计数

awk输出字段中文本的唯一计数,awk,Awk,我试图在输入文件中输出唯一文本的计数。它在$2中,但使用下面的公式,我似乎只能得到1。谢谢:) input.txt chrX:48544112-48544235 **WAS**:exon.1;WAS:exon.4;WAS:exon.6 271.171 chr5:1282528-1282754 **TERT**:exon.1;TERT:exon.3 349.08 chrX:48547038-48547465 **WAS**:exon.1;WAS:exon.10;WAS:exon.2 42.459

我试图在输入文件中输出唯一文本的计数。它在
$2
中,但使用下面的公式,我似乎只能得到1。谢谢:)

input.txt

chrX:48544112-48544235 **WAS**:exon.1;WAS:exon.4;WAS:exon.6 271.171
chr5:1282528-1282754 **TERT**:exon.1;TERT:exon.3 349.08
chrX:48547038-48547465 **WAS**:exon.1;WAS:exon.10;WAS:exon.2 42.459
2
所需输出

chrX:48544112-48544235 **WAS**:exon.1;WAS:exon.4;WAS:exon.6 271.171
chr5:1282528-1282754 **TERT**:exon.1;TERT:exon.3 349.08
chrX:48547038-48547465 **WAS**:exon.1;WAS:exon.10;WAS:exon.2 42.459
2

如果将字段分隔符重新定义为“冒号或空格”,则会简单得多

awk -F '[: ]' '!seen[$3]++ {n++} END {print n}' file

如果将字段分隔符重新定义为“冒号或空格”,则会简单得多

awk -F '[: ]' '!seen[$3]++ {n++} END {print n}' file

替代非awk解决方案

 tr ':' ' ' <file | cut -d' ' -f3 | sort | uniq -c | wc -l

tr':''替代非awk解决方案

 tr ':' ' ' <file | cut -d' ' -f3 | sort | uniq -c | wc -l

tr':''Perl版本有点难看,因为它使用的是
$F[2]
而不是awk的
$3

perl -F'[: ]' -lane '$n++ if ! $seen{$F[2]}++; END{print $n}' file

Perl版本有点难看,因为它使用的是
$F[2]
而不是awk的
$3

perl -F'[: ]' -lane '$n++ if ! $seen{$F[2]}++; END{print $n}' file

为什么
!看到[$5]+
而不是
!看到[$2]+
?你在数什么?WAS、TERT等?就是这样,我忘了从另一个
awk
更改字段。有没有一种方法可以将所有的
$2
合并到一行中,并用一个与文件中匹配的逗号分隔。我也会更新帖子。谢谢你:)。我正在数过去的名字。谢谢:)。为什么
!看到[$5]+
而不是
!看到[$2]+
?你在数什么?WAS、TERT等?就是这样,我忘了从另一个
awk
更改字段。有没有一种方法可以将所有的
$2
合并到一行中,并用一个与文件中匹配的逗号分隔。我也会更新帖子。谢谢你:)。我正在数过去的名字。谢谢:)。