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
合并到一行中,并用一个与文件中匹配的逗号分隔。我也会更新帖子。谢谢你:)。我正在数过去的名字。谢谢:)。