우리는 다음과 같은 파일을 가지고 있습니다
파일에서 동일한 매개변수 이름과 해당 값을 볼 수 있습니다.
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