我正试图想办法在第二列的字符串重复时对一列的数字求和。
我的文件如下:
0.35 Scer|ChrIX|ref|NC_001141.1|
0.21 Scer|ChrIX|ref|NC_001141.1|
0.40 Scer|ChrIX|ref|NC_001141.1|
0.27 Scer|ChrIX|ref|NC_001141.1|
0.26 Scer|ChrIX|ref|NC_001141.1|
0.20 Scer|ChrIX|ref|NC_001141.1|
1.22 Scer|ChrI|ref|NC_001133.7|
0.08 Scer|ChrI|ref|NC_001133.7|
0.55 Scer|ChrVIII|ref|NC_001140.5|
0.07 Scer|ChrVIII|ref|NC_001140.5|
0.17 Scer|ChrVIII|ref|NC_001140.5|
我想要一个输出文件,其中包含第二列的名称,以及该特定字符串的第一列的值的总和:
Scer|ChrIX|ref|NC_001141.1|
1.69
Scer|ChrI|ref|NC_001133.7|
1.30
Scer|ChrVIII|ref|NC_001140.5|
0.79
我猜这是awk
可行但我无法找到正确的答案,也没有在论坛中找到它
非常感谢您提前
答案 0 :(得分:3)
使用awk
:
awk '{a[$NF]+=$1}END{for(x in a) printf "%s\n%4.2f\n",x,a[x]}' file
$ awk '{a[$NF]+=$1}END{for(x in a) printf "%s\n%4.2f\n",x,a[x]}' file
Scer|ChrVIII|ref|NC_001140.5|
0.79
Scer|ChrIX|ref|NC_001141.1|
1.69
Scer|ChrI|ref|NC_001133.7|
1.30
awk 'seen==$2 { cnt+=$1 ; next }
flag { printf "%s\n%4.2f\n", seen,cnt ; flag=0 }
{ seen=$2 ; cnt=$1 ; flag=1 }
END { printf "%s\n%4.2f\n", seen,cnt}
' file