我们有以下文件,
在文件中我们可以看到相同的参数名称及其值
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