> this preserves the order of the lines (which may or may not be desired)


raku -ne '.say if $++ == any 6,3,1' line0-10.txt

So there is no "$."/current input line # built-in?  I started with
# cat /tmp/lines.txt | perl -ne  'print if $. == 1 or $. == 3 or $. == 7'

but couldn't find a $. raku-ism.
https://docs.raku.org/language/variables#Special_variables

Pretty cool - I didn't know about the bare "$" as a magic state var.

a

Andy Bach, BS, MSCMECFA
Systems Mangler
Internet: andy_b...@wiwb.uscourts.gov<mailto:andy_b...@wiwb.uscourts.gov>
Voice: (608) 261-5738, Cell: (608) 658-1890

"The three great problems of computer science:
compiler complexity and 'off-by-one' errors".
https://martinfowler.com/bliki/TwoHardThings.html

________________________________
From: yary <not....@gmail.com>
Sent: Tuesday, August 25, 2020 4:13 PM
To: William Michels <w...@caa.columbia.edu>
Cc: perl6-users <perl6-us...@perl.org>; Parrot Raiser <1parr...@gmail.com>; 
ToddAndMargo <toddandma...@zoho.com>; Andy Bach <andy_b...@wiwb.uscourts.gov>; 
Curt Tilmes <c...@tilmes.org>
Subject: Re: print particular lines question

> Now, does anyone have a simpler way than using the ".map" above?

There were a few in the thread!

Here's my golfing, unlike the others, this preserves the order of the lines 
(which may or may not be desired)


raku -ne '.say if $++ == any 6,3,1' line0-10.txt

-y


On Tue, Aug 25, 2020 at 12:03 PM William Michels via perl6-users 
<perl6-us...@perl.org<mailto:perl6-us...@perl.org>> wrote:
If Todd wants to print lines containing "Line 1", "Line 3", and "Line 7", he's 
going to have to correct for zero-indexing:

user@book:~$ raku -e '$*IN.lines[ 1,3,7 ].join("\n").put;' < Lines.txt
Line 2
Line 4
Line 8

#Below: subtracting one from (1,3,7) gives the return he wants:

user@book:~$ raku -e '$*IN.lines[ (1,3,7).map: { $_ - 1 } ].join("\n").put;' < 
Lines.txt
Line 1
Line 3
Line 7

Now, does anyone have a simpler way than using the ".map" above?

HTH, Bill.



On Tue, Aug 25, 2020 at 10:46 AM Andy Bach 
<andy_b...@wiwb.uscourts.gov<mailto:andy_b...@wiwb.uscourts.gov>> wrote:
Ah, I see, the -n reads a line and then my lines on $*IN starts with the next 
one
C:\> type lines.txt | "\Program Files (x86)\rakudo\bin\raku.exe"   -e "my @x = 
$*IN.lines(); say @x[0,1,7,3]; "
(Line 0 Line 1 Line 7 Line 3)

and so $*IN is the default for lines()
C:\> type lines.txt | "\Program Files (x86)\rakudo\bin\raku.exe"   -e "my @x = 
lines(); say @x[0,1,7,3]; "
(Line 0 Line 1 Line 7 Line 3)

This hangs, with and without the -n
C:\> "\Program Files (x86)\rakudo\bin\raku.exe"   -ne "my @x = $*IN.lines(); 
say @x[0,1,7,3]; " lines.txt

Though:
C:\> "\Program Files (x86)\rakudo\bin\raku.exe"   -ne "my @x = lines(); say 
@x[0,1,7,3]; " lines.txt
(Line 1 Line 2 Line 8 Line 4)
Cannot do 'get' on a handle in binary mode
  in block <unit> at -e line 1

a

Andy Bach, BS, MSCMECFA
Systems Mangler
Internet: andy_b...@wiwb.uscourts.gov<mailto:andy_b...@wiwb.uscourts.gov>
Voice: (608) 261-5738, Cell: (608) 658-1890

"The three great problems of computer science:
compiler complexity and 'off-by-one' errors".
https://martinfowler.com/bliki/TwoHardThings.html

________________________________
From: Andy Bach 
<andy_b...@wiwb.uscourts.gov<mailto:andy_b...@wiwb.uscourts.gov>>
Sent: Tuesday, August 25, 2020 12:18 PM
To: Parrot Raiser <1parr...@gmail.com<mailto:1parr...@gmail.com>>
Cc: perl6-users <perl6-us...@perl.org<mailto:perl6-us...@perl.org>>; 
ToddAndMargo <toddandma...@zoho.com<mailto:toddandma...@zoho.com>>
Subject: Re: print particular lines question

On Win10
C:\>type lines.txt | "\Program Files (x86)\rakudo\bin\raku.exe"   -ne "say 
lines()[1,7,3]; "
(Line 2 Line 8 Line 4)
(Line 11 Nil Nil)

C:\>type lines.txt | "\Program Files (x86)\rakudo\bin\raku.exe"   -ne "say 
lines()[1,7,3].join(qq~\n~); "
Line 2
Line 8
Line 4
Use of Nil in string context
  in block  at -e line 1
Use of Nil in string context
  in block  at -e line 1
Line 11

and, speaking of that off by one problem ... lines.txt does start with "line 0"
C:\> type lines.txt | "\Program Files (x86)\rakudo\bin\raku.exe"   -ne "my @x = 
$*IN.lines(); say @x[0,1,7,3]; "
(Line 1 Line 2 Line 8 Line 4)

a

Andy Bach, BS, MSCMECFA
Systems Mangler
Internet: andy_b...@wiwb.uscourts.gov<mailto:andy_b...@wiwb.uscourts.gov>
Voice: (608) 261-5738, Cell: (608) 658-1890

"The three great problems of computer science:
compiler complexity and 'off-by-one' errors".
https://martinfowler.com/bliki/TwoHardThings.html

________________________________
From: Parrot Raiser <1parr...@gmail.com<mailto:1parr...@gmail.com>>
Sent: Tuesday, August 25, 2020 11:22 AM
To: Andy Bach <andy_b...@wiwb.uscourts.gov<mailto:andy_b...@wiwb.uscourts.gov>>
Cc: perl6-users <perl6-us...@perl.org<mailto:perl6-us...@perl.org>>; 
ToddAndMargo <toddandma...@zoho.com<mailto:toddandma...@zoho.com>>
Subject: Re: print particular lines question

That will golf a little (and improve it) to:

$ raku -e '.say for lines()[3,2,5]' lines.txt

but you have to remember that it's zero-based. I used the first sample
file and got
Line 4
Line 3
Line 6

"The three great problems of computer science: compiler complexity and
'off-by-one' errors".


On 8/25/20, Andy Bach 
<andy_b...@wiwb.uscourts.gov<mailto:andy_b...@wiwb.uscourts.gov>> wrote:
>> Assigning  `my @x=$_.lines` puts everything into $x[0]
>
> Trying this on windows
>
> C:\> raku.exe   -e "my @x = 'lines.txt'.IO.lines; say
> @x[1,7,3].join(qq~\n~); "
> Line 1
> Line 7
> Line 3
>
> or
> C:\> raku.exe -e " say 'lines.txt'.IO.lines[1,7,3].join(qq~\n~); "
> Line 1
> Line 7
> Line 3
>
> a
>
> Andy Bach, BS, MSCMECFA
> Systems Mangler
> Internet: 
> andy_b...@wiwb.uscourts.gov<mailto:andy_b...@wiwb.uscourts.gov><mailto:andy_b...@wiwb.uscourts.gov<mailto:andy_b...@wiwb.uscourts.gov>>
> Voice: (608) 261-5738, Cell: (608) 658-1890
>
> Every man has the right to an opinion but no man
> has a right to be wrong in his facts. Nor, above all,
> to persist in errors as to facts. Bernard Baruch
>
> ________________________________
> From: ToddAndMargo via perl6-users 
> <perl6-us...@perl.org<mailto:perl6-us...@perl.org>>
> Sent: Monday, August 24, 2020 9:35 PM
> To: perl6-users <perl6-us...@perl.org<mailto:perl6-us...@perl.org>>
> Subject: print particular lines question
>
> Hi All,
>
> I seems I should know how to do this, but
> I am drawing a blank.
>
> $ cat Lines.txt | raku -ne 'say $_;'
> Line 1
> Line 2
> Line 3
> Line 4
> Line 5
> Line 6
> Line 7
> Line 8
> Line 9
> Line 10
> Line 11
>
>
> I want to print liens 1, 3, and 7.
>
> Assigning  `my @x=$_.lines` puts everything into $x[0]
>
>
> Many thanks,
> -T
>

Reply via email to