对所有出现参数的值求和

对所有出现参数的值求和

我们有以下文件,

在文件中我们可以看到相同的参数名称及其值

more file.txt

gg_ff_rr =56
gg_ff_rr =56
gg_ff_rr =52
jk_ll_tt=24
jk_ll_tt=24
jk_ll_tt=24
pl_pl_uu=10
pl_pl_uu=8
pl_pl_uu=10
ww_ee_qq=2
ww_ee_qq=2
ww_ee_qq=1
oo_pp_ww=10
oo_pp_ww=10
mm_mm_bb=1
AA_AA_AA=1
AA_AA_AA=1
AA_AA_AA=1
AA_AA_AA=1
.
.
.
.

我们计划将所有出现参数的值相加,因此预期输出将如下所示

gg_ff_rr=164
jk_ll_tt=72
pl_pl_uu=28
ww_ee_qq==5
oo_pp_ww=20
mm_mm_bb=1
AA_AA_AA=4
.
.
.
.

如何使用 bash/awk/shell-script 或 Perl oneliner 来完成

我们尝试以下方法

awk -F= '{a[$1]+=$2;}END{for(i in a){print i "=" a[i]}}'  /tmp/file.txt

macafi___pp___export___weer 100=0
macafi___pp___my_name___gtp___state 100=0
macafi___pp___my_name___gtp___enr 100=0
macafi___pp___trw___initial___mixed 100=0
macafi___pp___my_name___broad 100=0
macafi___pp___adc___voip___stat 100=0
macafi___pp___my_name___gtp 300=0
macafi___pp___trw___initial 200=0

而文件是这样的

more /tmp/file.txt

macafi___pp___my_name___broad 100
macafi___pp___my_name___gtp 300
macafi___pp___my_name___gtp___enr 100
macafi___pp___my_name___gtp___state 100
macafi___pp___adc___voip___stat 100
macafi___pp___export___weer 100
macafi___pp___trw___initial 200
macafi___pp___trw___initial___mixed 100
macafi___pp___trw___initial___mixed 100
macafi___pp___trw___initial___mixed 100

答案1

一种方法(如果输出顺序不是问题):

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

将文件读入数组,以第一列作为索引,并将该值与第二列值相加。解析文件后,只需打印数组的条目即可。

更新(因为新文件有空格作为分隔符):

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

相关内容