Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.debian.user > #266273

Re: counting commas

From Greg Wooledge <greg@wooledge.org>
Newsgroups linux.debian.user
Subject Re: counting commas
Date 2024-01-19 13:40 +0100
Message-ID <HXWk9-48pp-1@gated-at.bofh.it> (permalink)
References <HXRkt-45zk-1@gated-at.bofh.it> <HXSqd-46bF-1@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


On Fri, Jan 19, 2024 at 09:25:14AM +0100, Thomas Schmitt wrote:
> An answer to this question
>   https://stackoverflow.com/questions/16679369/count-occurrences-of-a-char-in-a-string-using-bash
> proposes
>     echo "referee" | tr -cd 'e' | wc -c
> 
>   $ echo ',,,' | tr -cd ',' | wc -c
>   3

That's one way, and it's sh-compatible.

If you actually want to do it in *bash* as the URL suggests, you can
take advantages of bash's extra features, to avoid forking two new
programs plus a subshell.

unicorn:~$ string="apple,banana,cherry,date"
unicorn:~$ commas=${string//[!,]/}
unicorn:~$ echo "${#commas}"
3

In this case, I'm using the ${varname//old/new} expansion to remove
everything that isn't a comma.

But at this point, we have to wonder what the *actual* goal is.  They
wanted to count the number of commas... why, exactly?  Are they going
to split the input string into a list of substrings?  If so, just do
that in the first place.

unicorn:~$ IFS=, read -ra list <<< "$string,"
unicorn:~$ declare -p list
declare -a list=([0]="apple" [1]="banana" [2]="cherry" [3]="date")

To understand why I added an extra comma at the end of the input
string, see <https://mywiki.wooledge.org/BashPitfalls#pf47>.

This approach needs adjustment if the input string may contain
newlines.  So, please state the actual goal up front, in full, and
include a worst-case-scenario example.

Finally, if the input is actually a CSV (Comma-Separated Values)
file, which may contain fields with commas *inside* them, then none
of these approaches work.  You need an actual CSV parser to handle
these files properly.

Back to linux.debian.user | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

counting commas fxkl47BF@protonmail.com - 2024-01-19 08:20 +0100
  Re: counting commas John Crawley <john@bunsenlabs.org> - 2024-01-19 08:30 +0100
  Re: counting commas <tomas@tuxteam.de> - 2024-01-19 09:10 +0100
  Re: counting commas "Thomas Schmitt" <scdbackup@gmx.net> - 2024-01-19 09:30 +0100
    Re: counting commas Michael Grant <mgrant@grant.org> - 2024-01-19 12:20 +0100
    Re: counting commas Greg Wooledge <greg@wooledge.org> - 2024-01-19 13:40 +0100
      Re: counting commas "Thomas Schmitt" <scdbackup@gmx.net> - 2024-01-19 16:30 +0100
        Re: counting commas fxkl47BF@protonmail.com - 2024-01-19 16:40 +0100
          Re: counting commas Greg Wooledge <greg@wooledge.org> - 2024-01-19 17:50 +0100
            Re: counting commas fxkl47BF@protonmail.com - 2024-01-19 18:30 +0100
            Re: counting commas debian-user@howorth.org.uk - 2024-01-19 18:30 +0100
              Re: counting commas John Hasler <john@sugarbit.com> - 2024-01-19 21:10 +0100
                Re: counting commas Nicholas Geovanis <nickgeovanis@gmail.com> - 2024-01-20 04:00 +0100
                Re: counting commas Nicholas Geovanis <nickgeovanis@gmail.com> - 2024-01-20 05:00 +0100
              Re: counting commas David Wright <deblis@lionunicorn.co.uk> - 2024-01-20 00:10 +0100
                Re: counting commas Cindy Sue Causey <butterflybytes@gmail.com> - 2024-01-20 01:10 +0100
                Re: counting commas Peter Hillier-Brook <phb@hbsys.plus.com> - 2024-01-20 01:10 +0100
                Re: counting commas Curt <curty@free.fr> - 2024-01-20 18:20 +0100
                Re: counting commas Greg Wooledge <greg@wooledge.org> - 2024-01-20 18:30 +0100
                Re: counting commas fxkl47BF@protonmail.com - 2024-01-20 18:40 +0100
                Re: counting commas Curt <curty@free.fr> - 2024-01-20 18:40 +0100
                Re: counting commas David Wright <deblis@lionunicorn.co.uk> - 2024-01-20 21:10 +0100
        Re: counting commas Nicholas Geovanis <nickgeovanis@gmail.com> - 2024-01-20 03:50 +0100
          Re: counting commas gene heskett <gheskett@shentel.net> - 2024-01-20 06:50 +0100
          Re: counting commas gene heskett <gheskett@shentel.net> - 2024-01-20 07:00 +0100
          Re: counting commas "Roy J. Tellason, Sr." <roy@rtellason.com> - 2024-01-20 21:40 +0100
            Re: counting commas gene heskett <gheskett@shentel.net> - 2024-01-20 22:10 +0100
            Re: counting commas John Hasler <john@sugarbit.com> - 2024-01-21 01:10 +0100
              Re: counting commas gene heskett <gheskett@shentel.net> - 2024-01-21 01:20 +0100
                Re: counting commas John Hasler <john@sugarbit.com> - 2024-01-21 01:30 +0100
                Re: counting commas gene heskett <gheskett@shentel.net> - 2024-01-21 02:10 +0100

csiph-web