매개변수의 모든 발생 값을 합산합니다.

매개변수의 모든 발생 값을 합산합니다.

우리는 다음과 같은 파일을 가지고 있습니다

파일에서 동일한 매개변수 이름과 해당 값을 볼 수 있습니다.

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

관련 정보