使用bash组合每列中具有相同名称的行
我的文件如下(但有52列和4000行): 我希望它看起来像这样:使用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 编辑:对不起,我不想删除其余的行和列。每一行名都会重复几次,所以我希望它只出现一次,并且每一列中
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