使用bash组合每列中具有相同名称的行

使用bash组合每列中具有相同名称的行,bash,bioinformatics,Bash,Bioinformatics,我的文件如下(但有52列和4000行): 我希望它看起来像这样: 1NA2 1NB2 2RA2 2RB2 Vibrionaceae 0.44 0.50 0.72 2.04 Bacillaceae 4.0 3.52 1.10 0.46 Enterobacteriaceae 1.10 1.04 4.80 2.46 编辑:对不起,我不想删除其余的行和列。每一行名都会重复几次,所以我希望它只出现一次,并且每一列中

我的文件如下(但有52列和4000行):

我希望它看起来像这样:

                   1NA2  1NB2  2RA2  2RB2
Vibrionaceae       0.44  0.50  0.72  2.04
Bacillaceae        4.0   3.52  1.10  0.46
Enterobacteriaceae 1.10  1.04  4.80  2.46
编辑:对不起,我不想删除其余的行和列。每一行名都会重复几次,所以我希望它只出现一次,并且每一列中都有总计。 我尝试了以下方法:

awk '{a[$1]+=$2}END{for(i in a) print i,a[i]}' file

但它只对第一列执行此操作,我希望它对所有52列都有效。

使用GNUawk和2D数组:

awk 'NR==1
     NR>1{
       for(i=2; i<=NF; i++){
         a[$1][i]+=$i
       }
     }
     END{
       for(i in a){
         printf("%-19s", i)
         for(j=2; j<=NF; j++){
           printf("%.2f  ", a[i][j])
         }
         print ""
       }
     }' file
awk'NR==1
NR>1{

对于(i=2;i1{for(i=2;i带有GNUawk和2D数组:

awk 'NR==1
     NR>1{
       for(i=2; i<=NF; i++){
         a[$1][i]+=$i
       }
     }
     END{
       for(i in a){
         printf("%-19s", i)
         for(j=2; j<=NF; j++){
           printf("%.2f  ", a[i][j])
         }
         print ""
       }
     }' file
awk'NR==1
NR>1{

for(i=2;i1{for(i=2;如果可以,请使用
awk
。请发布您迄今为止尝试过的内容。您是否因为出现两次而将数字翻倍?您是否只希望删除第5行到第4000行?如果名称出现三次,是否应将数字翻倍?如果可以,请使用
awk
。请发布您迄今为止尝试过的内容。您是否因为出现两次而将数字翻倍出现两次?是否只想删除第5行到第4000行?如果名称出现三次,是否应将数字增加三倍?
awk 'NR==1; NR>1{for(i=2; i<=NF; i++){a[$1][i]+=$i}} END{for(i in a){printf("%-19s", i); for(j in a[i]){printf("%.2f  ", a[i][j])} print ""}}' file
1NA2 1NB2 2RA2 2RB2 Bacillaceae 4.00 3.52 1.10 0.46 Vibrionaceae 0.44 0.50 0.72 2.04 Enterobacteriaceae 1.10 1.04 4.80 2.46