Bash 按第1列分组,并对第2列的唯一出现次数求和

Bash 按第1列分组,并对第2列的唯一出现次数求和,bash,group-by,count,Bash,Group By,Count,我有一个2列的标识符文件:id1和id2。总共有1643行。每行是id1和id2的唯一组合 以下是第一行: id1,id2 AAACCCACAGACTGCC,CTGGCTTTCT AAACCCATCCACCCTA,ATGACGACTN AAACGAAAGTACAACA,CGCACAACGN AAACGAAGTTGGAGAC,TATATTACAC AAACGAAGTTGGAGAC,TTAGTATGTN AAACGAAGTTGGAGAC,TTTCCTTATC AAACGAATCCTTCACG,ATC

我有一个2列的标识符文件:id1和id2。总共有1643行。每行是id1和id2的唯一组合

以下是第一行:

id1,id2
AAACCCACAGACTGCC,CTGGCTTTCT
AAACCCATCCACCCTA,ATGACGACTN
AAACGAAAGTACAACA,CGCACAACGN
AAACGAAGTTGGAGAC,TATATTACAC
AAACGAAGTTGGAGAC,TTAGTATGTN
AAACGAAGTTGGAGAC,TTTCCTTATC
AAACGAATCCTTCACG,ATCAACATCN
AAACGCTTCAGCCCAG,TACGCCACAN
AAAGAACCAAGTCATC,CTTCTTAGTT
AAAGAACCAAGTCATC,GCTTGCTCGT
我有1433个唯一的id1和1632个唯一的id2。我想按id1分组,并计算每个id1有多少个唯一的id2。我想要一个输出文件,第一列中有唯一的id1,第二列中有唯一对应的id2的编号。对于上述玩具输入,预期输出为

id1,n
AAACCCACAGACTGCC,1
AAACCCATCCACCCTA,1
AAACGAAAGTACAACA,1
AAACGAAGTTGGAGAC,3
AAACGAATCCTTCACG,1
AAACGCTTCAGCCCAG,1
AAAGAACCAAGTCATC,2
我在bash中找不到这样做的方法。你有什么建议吗

提前谢谢你!
Eleni基于文件id1id2中存储的示例数据并使用awk:

awk -F, '{ id[$1][$2]="" } END { for (i in id) { count=0;printf "%s","\n"i"\t";for (j in id[i]) { count++ } printf "%s",count } printf "%s","\n" }' id1id2 > id1id2count
使用,作为字段分隔符,然后使用id1和id2作为索引创建多维数组。然后在数组中循环计算唯一ID2和每个id1的数量,并在执行过程中打印它们。将输出重定向到另一个文件id1id2count

sed 's#,.*##' file.txt | sort | uniq -c | awk '{ print $2 "," $1 }'
  • 删除所有行中的komma和id2
  • 对行进行排序,使相同的id1相邻
  • 统计所有id1的出现次数
  • 格式输出

  • 请用代码标签包装您的样本,并在您的问题中以代码的形式发布您的努力(这是非常鼓励的),谢谢。请将您希望的输出(无描述)添加到您的问题中(无评论)。我做了更改,感谢您的建议。我希望我的问题现在更容易理解。
    sed'1d'文件| cut-d','-f1 | uniq-c
    ?这同样有效:)