On Fri, May 8, 2020 at 5:16 AM WFB <wolfgang.banas...@gmail.com> 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/; END { @i.sort.say }" > That does not work because @i does not exist in the if clause. I tried our @i > as well with no luck. > > How can I store data that can be accessed in the END phaser? Or is there > another way to archive it? TIMTOWTDI^^ > > One hint I found was the variable $ and @ respectively. But those variables > are created for each line new... > > > I did not found a help or examples for -npe except raku -h. Is there more > helpful stuff somewhere in doc.raku.org? If so I could'nt find it. > > Thanks, > Wolfgang
Hi Wolfgang, This is a first attempt at doing what you want: I'm sure it can be shortened. Since one of your requirements is doing a sort on filtered values stored in an array, I abandoned use of the "-ne" one-liner flag, using "-e" and "for lines()" instead. I also used grep instead of smart-matching: perl6 -e 'my @i; for lines() {if .grep(/^WARN/) -> ($s) {@i.push($s)};}; .say for @i.sort;' Note: the "-> ($s)" section where I store grepped matches comes from a Jonathan Worthington answer found here (thanks Jonathan!): stackoverflow.com/questions/58982745/raku-one-line-expression-to-capture-group-from-string I certainly would be interested to learn if there's a phaser solution to this problem (and I also have a sneaking suspicion that Supply might be useful here... ). HTH, Bill.