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

时间:2015-10-06 17:13:04

标签: awk

我正在尝试输入输入文件中唯一文字的计数。它位于$2但是我似乎只能使用下面的数字得到1。谢谢你:)。

awk '{sub(/:.*/,"",$2)} !seen[$5]++{unq++} END{print unq}' input.txt > output.txt

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

3 个答案:

答案 0 :(得分:5)

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

Source: local data frame [6 x 7]
Groups: a [6]

       a        x1        x2    x3       x4       x5    x6
  (fctr)     (dbl)     (dbl) (dbl)    (dbl)    (dbl) (dbl)
1      a 0.3333333 0.6666667     3 1.333333 1.666667     2
2      b 0.3333333 0.6666667     3 1.333333 1.666667     2
3      c 0.3333333 0.6666667     3 1.333333 1.666667     2
4      d 0.3333333 0.6666667     3 1.333333 1.666667     2
5      e 0.3333333 0.6666667     3 1.333333 1.666667     2
6      f 0.3333333 0.6666667     3 1.333333 1.666667     2

答案 1 :(得分:3)

替代非awk解决方案

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

答案 2 :(得分:1)

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

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