我是新手,所以如果在其他地方得到回答,请将此问题提交给我。我进行了广泛的搜索,有类似的问题,但没有一个真正适用于我的问题。
我想计算每个班级的唯一名字数量。我有一张包含名单(第1列)及其类(第2列)的表格。我需要知道列表中每个类有多少个唯一名称。该列表以制表符分隔。
我想AWK很可能会很快解决这个问题,但我对AWK的熟练程度并不高。
{{1}}
答案 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
跳过了标题,并写了一个带有两个标签的输出文件。