[CentOS] [OT] Bash help

Wed Oct 25 17:00:09 UTC 2017
Leroy Tennison <leroy at datavoiceint.com>

Although "not my question", thanks, I learned a lot about array processing from your example.

----- Original Message -----
From: "warren" <warren at etr-usa.com>
To: "centos" <centos at centos.org>
Sent: Wednesday, October 25, 2017 11:47:12 AM
Subject: Re: [CentOS] [OT] Bash help

On Oct 25, 2017, at 10:02 AM, Mark Haney <mark.haney at neonova.net> wrote:
> I have a file with two columns 'email' and 'total' like this:
> me at example.com 20
> me at example.com 40
> you at domain.com 100
> you at domain.com 30
> I need to get the total number of messages for each email address.

This screams out for associative arrays.  (Also called hashes, dictionaries, maps, etc.)

That does limit you to CentOS 7+, or maybe 6+, as I recall.  CentOS 5 is definitely out, as that ships Bash 3, which lacks this feature.

declare -A totals

while read line
    IFS="\t " read -r -a elems <<< "$line"

    declare -i n=${totals[$email]}
done < stats

for k in "${!totals[@]}"
    printf "%6d  %s\n" ${totals[$k]} $k

You’re making things hard on yourself by insisting on Bash, by the way.  This solution is better expressed in Perl, Python, Ruby, Lua, JavaScript…probably dozens of languages.
CentOS mailing list
CentOS at centos.org