bug-gawk
[Top][All Lists]
Advanced

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

Re: How to substitute in a string for the first n matches?


From: Wolfgang Laun
Subject: Re: How to substitute in a string for the first n matches?
Date: Mon, 29 Mar 2021 16:43:03 +0200

My solution is also non-linear since it copies chunks repeatedly. This
cannot be helped: awk has no notion of "pure storage".

Arnold is right: it won't matter much, either way, unless you are stringing
along megabytes.

If this worries you, use C, C++, and so on.
-W

On Mon, 29 Mar 2021 at 16:38, <arnold@skeeve.com> wrote:

> Unless your string is many megabytes long, you won't notice the time
> issue.
>
> There are other options, for example using patsplit and then putting
> the string back together as desired.
>
> In any case, gensub isn't going to be extended to allow arbitrary
> ranges and/or lists of occurrences to substitute.  Gawk provides
> the basic building blocks as built-in functionality; more specific
> use cases should be dealt with in user defined functions.
>
> Arnold
>
> Peng Yu <pengyu.ut@gmail.com> wrote:
>
> > This can be slow as the time complexity should be linear wrt to the
> > length of the string (suppose the regex to match is randomly spersed
> > in the input string), but this implementation is quadratic.
> >
> > Should gensub() allows a more flexible "h" parameter so that it can
> > accept a range like 1-3 (besides just numbers and "g"/"G") which means
> > replacing the 1st, 2nd, and 3rd matches?
> >
> > On Mon, Mar 29, 2021 at 1:33 AM <arnold@skeeve.com> wrote:
> > >
> > > This is the right idea. For production use it should be
> > > wrapped in a nice function.
> > >
> > > Arnold
> > >
> > > david kerns <david.t.kerns@gmail.com> wrote:
> > >
> > > > don't hate me!
> > > >
> > > > awk -v n=4
> 'BEGIN{x="rrrrrrrrrr";for(i=0;i<n;i++){sub("r","x",x)}print x}'
> > > >
> > > > On Fri, Mar 26, 2021 at 1:57 PM Peng Yu <pengyu.ut@gmail.com> wrote:
> > > >
> > > > > Hi,
> > > > >
> > > > > man gawk says.
> > > > >
> > > > > """
> > > > > gensub(r, s, h [, t])
> > > > >
> > > > > h is a number indicating which match of r to replace.
> > > > > """
> > > > >
> > > > > Is there a way to perform string substitution for the first n
> matches in
> > > > > awk?
> > > > >
> > > > > --
> > > > > Regards,
> > > > > Peng
> > > > >
> > > > >
> >
> >
> >
> > --
> > Regards,
> > Peng
>
>

-- 
Wolfgang Laun


reply via email to

[Prev in Thread] Current Thread [Next in Thread]