请问使用awk如何先按照第一列的值分组,然后再统计之后的各列

比如 有个文件
    a   123 234 345
    a   234 345 567
    a   123 345 789
    b   123 234 567
先按第一列分开,在分别统计后3列,不重复数的个数。结果:前3行 a   2 2 3 后一行 b   1 1 1。
最后输出效果
a 2 2 3
b 1 1 1

思路

  1. awk '{for(i=2;i<=NF;i++)if(!a[$1,$i,i]++){b[$1];c[$1,i]++;if(i==NF)sum[$1]+=$NF}} END{for(i in b){printf i;for(j=1;j<=NF-1;j++)printf " "c[i,j];print " "sum[i]" "sum[i]/c[i,NF]}}' i
  2. a  2 2 1701 567
  3. b  1 1 567 567

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值