パラメーターのすべての発生値を合計します。

パラメーターのすべての発生値を合計します。

私たちは次のファイルを持っています

ファイルに同じパラメーター名とその値を表示できます。

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

ファイルを最初の列にインデックス付けされた配列として読み込み、その値を2番目の列の値に追加します。ファイルを解析したら、配列内の項目を印刷します。

更新(新しいファイルに区切り文字でスペースがあるため):

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

関連情報