bash command for group by count

Viewed 2705

I have a file in the following format

abc|1
def|2
abc|8
def|3
abc|5
xyz|3

I need to group by these words in the first column and sum the value of the second column. For instance, the output of this file should be

abc|14
def|5
xyz|3

Explanation: the corresponding values for word "abc" are 1, 8, and 5. By adding these numbers, the sum comes out to be 14 and the output becomes "abc|14". Similarly, for word "def", the corresponding values are 2 and 3. Summing up these, the final output comes out to be "def|5".

Thank you very much for the help :)

I tried the following command

awk -F "|" '{arr[$1]+=$2} END {for (i in arr) {print i"|"arr[i]}}' filename

another command which I found was

awk -F "," 'BEGIN { FS=OFS=SUBSEP=","}{arr[$1]+=$2 }END {for (i in arr) print i,arr[i]}' filename

Both didn't show me the intended results. Although I'm also in doubt of the working of these commands as well.

3 Answers
Related