Re: [OT] Bash help

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]



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

----- Original Message -----
From: "warren" <warren@xxxxxxxxxxx>
To: "centos" <centos@xxxxxxxxxx>
Sent: Wednesday, October 25, 2017 11:47:12 AM
Subject: Re:  [OT] Bash help

On Oct 25, 2017, at 10:02 AM, Mark Haney <mark.haney@xxxxxxxxxxx> wrote:
> 
> I have a file with two columns 'email' and 'total' like this:
> 
> me@xxxxxxxxxxx 20
> me@xxxxxxxxxxx 40
> you@xxxxxxxxxx 100
> you@xxxxxxxxxx 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.


#!/bin/bash
declare -A totals

while read line
do
    IFS="\t " read -r -a elems <<< "$line"
    email=${elems[0]}
    subtotal=${elems[1]}

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

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


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@xxxxxxxxxx
https://lists.centos.org/mailman/listinfo/centos
_______________________________________________
CentOS mailing list
CentOS@xxxxxxxxxx
https://lists.centos.org/mailman/listinfo/centos




[Index of Archives]     [CentOS]     [CentOS Announce]     [CentOS Development]     [CentOS ARM Devel]     [CentOS Docs]     [CentOS Virtualization]     [Carrier Grade Linux]     [Linux Media]     [Asterisk]     [DCCP]     [Netdev]     [Xorg]     [Linux USB]


  Powered by Linux