groupby/总和第一列中的所有列都相同awk [英] groupby/sum all columns in first column identical awk

查看:82
本文介绍了groupby/总和第一列中的所有列都相同awk的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个文件,其中包含n列(不知道提前多少列).我需要对具有相同column1值的列求和并将其打印出来.除第一列外,所有列均为数字.例如

I have a file that has n columns in it (dont know how many columns in advance). I need to sum columns having identical column1 values and print them. All columns are numeric except first column. For example

file1.txt

file1.txt

col1 col2 col3 ... colN
val1 3000 1000 ... 5000 
val2 3000 1000 ... 5000
val1 1000 2000 ... 3000

预期输出:

col1 col2 col3 ... colN
val1 4000 3000 ... 8000 
val2 3000 1000 ... 5000

我尝试过:

awk '{sums[$1] += $2} END { for (i in sums) printf("%s %s\n", i, sums[i])}' file1.txt | sort 

这仅打印前两列.我需要添加并打印所有列.

This prints only first two columns. I need to add and print all columns.

推荐答案

这应该有效:

awk 'NR==1{print;next}
    {b[$1];for(i=2;i<=NF;i++)a[$1,i]+=$i}
    END{for(x in b){
            printf "%s ",x;
            for(i=2;i<=NF;i++)
                printf "%s" (i==NF?"\n":" "),a[x,i]}}' file

包含您的数据:

kent$  cat f
col1 col2 col3 colN
val1 3000 1000 5000 
val2 3000 1000 5000
val1 1000 2000 3000

kent$  awk 'NR==1{print;next}
        {b[$1];for(i=2;i<=NF;i++)a[$1,i]+=$i}
        END{for(x in b){printf "%s ",x;
                        for(i=2;i<=NF;i++)
                           printf "%s" (i==NF?"\n":" "),a[x,i]}}' f
col1 col2 col3 colN
val1 4000 3000 8000
val2 3000 1000 5000

这篇关于groupby/总和第一列中的所有列都相同awk的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆