我有一个这种格式的大型数据库:
0500506 gi|561108321|ref|NC_018143.2| 71446 0
0500506 gi|561108321|ref|NC_018143.2| 71447 0
0500508 gi|561108321|ref|NC_018143.2| 71449 0
0500509 gi|561108321|ref|NC_018143.2| 71447 0
我想要做的是创建一个新表,其中包含第三列中每个出现的次数,如下所示
71446 1 0500506
71447 2 0500506,0500509
71449 1 0500508
重要的是,整行不会匹配,所以我想确保我只匹配单列中的值。我假设我可以采用以下解决方案之一 使用 grep 计算出现的总数,但我不确定如何。
非常感谢,梦
答案1
awk
可能更能胜任这项任务
awk '{sep=$3 in a?",":"";b[$3]++;
a[$3]=a[$3]sep$1}; END{for (k in a) print k, b[k], a[k]}' file