按类型计算独特基因的数量

时间:2017-09-06 15:40:43

标签: unix awk

我是新手,所以如果在其他地方得到回答,请将此问题提交给我。我进行了广泛的搜索,有类似的问题,但没有一个真正适用于我的问题。

我想计算每个班级的唯一名字数量。我有一张包含名单(第1列)及其类(第2列)的表格。我需要知道列表中每个类有多少个唯一名称。该列表以制表符分隔。

我想AWK很可能会很快解决这个问题,但我对AWK的熟练程度并不高。

{{1}}

4 个答案:

答案 0 :(得分:1)

$ cat f
Name    Class
ABCD    protein-coding 
ABCD    protein-coding
DCFG    lincRNA
GTFR    lincRNA

$ awk 'FNR>1{a[$2]+=!( ($1,$2) in b); b[$1,$2]}END{for(i in a)print i, a[i]}' f
lincRNA 2
protein-coding 1

答案 1 :(得分:0)

您可以对文件进行排序,然后获取唯一值,如下所示:

代码:

sort test_file.txt | uniq | awk '{print $2}' | uniq -c

输出:

1 protein-coding
2 lincRNA

答案 2 :(得分:0)

使用GNU awk实现真正的多维数组:

$ awk 'NR>1{names[$2][$1]} END{for (class in names) print class, length(names[class])}' file
lincRNA 2
protein-coding 1

任何awk:

$ awk 'NR>1{if (!seen[$2,$1]++) cnt[$2]++} END{for (class in cnt) print class, cnt[class]}' file
lincRNA 2
protein-coding 1

答案 3 :(得分:0)

如果使用 uniq sort ,解决方案可能是:

sed 1d input.tsv | sort -t $'\t' | uniq | awk '{print $2}' | uniq -c | awk 'BEGIN{print "Class\tCount"}{print $2"\t"$1}'

我用sed 1d跳过了标题,并写了一个带有两个标签的输出文件。