Uh, just stand up and having 16 answers in my inbox :-) Thanks guys!
The : mistake was because I did not copy&paste instead I wrote it and put
the : in there accidentally.
The curly braces for the phasers was the issue. But I though phasers are
written this way like IF clauses are. I already saw b
The comma is more boring than that, it's simply separating the arguments to
the sub "grep" - adding parend
.say for sort grep( *.starts-with(q[WARN]), lines )
grep as a sub takes a routine as the 1st arg, and the list to grep
through after.
-y
On Fri, May 8, 2020 at 7:28 PM William Michels
>Boring hard-to-read solution not using any of those
> raku -e'.say for sort grep *.starts-with(q[WARN]),lines' sample.log
Interesting! I don't think I've seen a comma used like that in a
one-liner. Also a very fast solution (thanks Brad!).
Presumably the ",lines" tells raku/perl6 to run the
e() do differently than join() here? I was thinking weeding
out duplicates but it seems not.
From: Fernando Santagata
Sent: Friday, May 8, 2020 2:16 PM
To: yary
Cc: William Michels ; WFB ;
perl6-users
Subject: Re: Raku -npe command line usage
On Fri, May 8,
On Fri, May 8, 2020 at 6:10 PM Fernando Santagata
wrote:
> raku -e'lines() ==> grep(/^WARN/) ==> sort() ==> reduce({$^a ~ "\n" ~
> $^b}) ==> say()' sample.log
>
and the reduce call can be written more compactly: reduce({"$^a\n$^b"})
--
Fernando Santagata
> perl6 -e 'lines() ==> grep /^WARN/ ==> sort() ==> join("\n") ==> say();'
that's neat too.
This is showed me that I didn't have a clear grasp of the feed operator ==>
vs the hyper-operator >>
Now I have learned/internalized that the feed operators pass along the
entire sequence (list?), whereas
Maybe?
perl6 -e 'lines() ==> grep /^WARN/ ==> sort() ==> join("\n") ==> say();'
HTH, Bill.
On Fri, May 8, 2020 at 9:10 AM Fernando Santagata
wrote:
>
> raku -e'.say for lines() ==> grep(/^WARN/) ==> sort' sample.log
>
> is not very satisfying because for the "for" which breaks the flow.
> OTOH
Ooops forgot the sort... let's golf with the hyper-operator again...
raku -ne'push my @i: $_ if .starts-with: q[WARN]; END @i.sort>>.say'
sample.log
-y
On Fri, May 8, 2020 at 1:10 PM yary wrote:
> ooh neat! I didn't know. Indeed this works. Thanks Sean!
>
> raku -ne'push my @i: $_ if
ooh neat! I didn't know. Indeed this works. Thanks Sean!
raku -ne'push my @i: $_ if .starts-with: q[WARN]; END .say for @i'
sample.log
-y
On Fri, May 8, 2020 at 1:04 PM Sean McAfee wrote:
> On Fri, May 8, 2020 at 6:53 AM Brad Gilbert wrote:
>
>> So together that would be:
>>
>> raku
On Fri, May 8, 2020 at 6:53 AM Brad Gilbert wrote:
> So together that would be:
>
> raku -ne 'BEGIN my @i; @i.push($_) if /^WARN/; END .say for @i.sort'
>
Or alternately the main body of the loop can be written:
(my @i).push($_) if /^WARN/;
Or even:
push my @i: $_ if /^WARN/;
It'
I like this formulation Fernando posted (removed a set of parens not needed
with method calls)
raku -e'lines.grep(/^WARN/).sort».say' sample.log
It is clean, all left-to-right, and doesn't use "map" for its side-effects
only.
Putting the feed operator back in where it would work–have to keep
raku -e'.say for lines() ==> grep(/^WARN/) ==> sort' sample.log
is not very satisfying because for the "for" which breaks the flow.
OTOH this
raku -e'lines().grep(/^WARN/).sort».say' sample.log
doesn't use the feed operator and this
raku -e'lines() ==> grep(/^WARN/) ==> sort() ==> say()' sample
All good ideas so far, in the "more than one way to do it" spirit, can use
"state" instead of "my", since state only initializes 1st time it's hit.
raku -ne 'state @i;@i.push($_) if .starts-with(q[WARN]); END .say for
@i.sort' sample.log
Or adapting Brad's answer with the feed operator for fu
On Fri, May 8, 2020 at 5:16 AM WFB wrote:
>
> Hi,
>
> I am trying to write an one-liner to go through all lines in a logfile and
> look for an certain key word, store the line and sort them before printing
> them out.
>
> My approach was:
> raku -ne "BEGIN {my @i }; @i.push($_); if $_ ~~ /^WARN/
The 「@i」 is defined within the 「BEGIN」 block, so it is scoped to the
「BEGIN」 block.
If you didn't want that, don't use a *block* with 「BEGIN」.
BEGIN my @i;
Also you wrote the 「if」 wrong.
There shouldn't be a 「;」 before the 「if」.
You also don't need to use 「$_ ~~ 」 with 「/^WARN/」 as that woul
Hi,
I am trying to write an one-liner to go through all lines in a logfile and
look for an certain key word, store the line and sort them before printing
them out.
My approach was:
raku -ne "BEGIN {my @i }; @i.push($_); if $_ ~~ /^WARN/; END { @i.sort.say
}"
That does not work because @i does not
16 matches
Mail list logo