如果第一列具有相同的条目,则在 Linux 中单独添加所有列

如果第一列具有相同的条目,则在 Linux 中单独添加所有列

我有这个输出 filename.txt

AC1481523 001 001 001 001
AC1481523 005 005 005 005
AC1481676 003 003 005 004
AC1481676 003 002 001 004

我想单独添加所有列,其中第一列具有相同的值。我试过这个

awk '{for (j = 1; j <= 200; j++) a[$1]+=$j} END {for(i in a) print i,a[i] }' filename.txt

我将所有数字添加到一列中,然后得到

AC1481523 24
AC1481676 25

但我想要

AC1481523 6 6 6 6 
AC1481676 6 5 6 8

答案1

这是一种方法:

$ awk '{ for (j = 2; j <= NF; j++) a[$1][j]+=$j }
       END {
            for(i in a){
                printf "%s", i; 
                for(field in a[i]){ 
                    printf " %s",a[i][field] 
                } 
                print ""
            }
        }' file 
AC1481676 6 5 6 8
AC1481523 6 6 6 6

请注意,我已经j从 2 开始计数,因为我们不需要第一个字段,直到 NF(字段数)而不是 200。这样,只要它 >= 2,它就可以用于任意数量的字段。然后,该脚本使用多维数组 ( a[$1][j]),以便对于每个第一个字段,都有一个包含所有关联值的数组。最后,我们迭代数组,根据需要进行打印。

相关内容