我有一个文件的值如下:
(X1 55) (X2 99) (X3 29) (X1 3) (X3 10)
(X1 21) (X3 11) (X1 9)
Run Code Online (Sandbox Code Playgroud)
有没有办法Xn按每行中的名称添加值:
(X1 58) (X2 99) (X3 39)
(X1 30) (X3 11)
Run Code Online (Sandbox Code Playgroud)
我不确定哪个最好用,awk,sed或......?我试过这个:
awk '{for (i=t=0;i<NF;) t+=$++i; $0=t}1' file
196
41
Run Code Online (Sandbox Code Playgroud)
它显然将所有值加在一起,所以也许它有点复杂.
$ awk '{
for (i=1;i<NF;i+=2) {
sum[$i]+=$(i+1)
}
ofs = ""
for (key in sum) {
printf "%s%s %d)", ofs, key, sum[key]
delete sum[key]
ofs = OFS
}
print ""
}' file
(X2 99) (X3 39) (X1 58)
(X3 11) (X1 30)
Run Code Online (Sandbox Code Playgroud)
如果您关心字段的顺序,有多种方法可以保留原始订单...
| 归档时间: |
|
| 查看次数: |
198 次 |
| 最近记录: |