[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [bug-gawk] Gawk Enhancement Suggestion
From: |
Aharon Robbins |
Subject: |
Re: [bug-gawk] Gawk Enhancement Suggestion |
Date: |
Tue, 06 Dec 2011 22:38:32 +0200 |
User-agent: |
Heirloom mailx 12.4 7/29/08 |
Hi Ed.
Re the below. See the node "Cut Program" in the gawk manual.
Adaptation into a function should be straightforward.
A diff to redo that section as a function + code to call it will
be cheerily reviewed and most likely accepted.
Thanks,
Arnold
> Date: Fri, 02 Dec 2011 07:36:50 -0600
> From: Ed Morton <address@hidden>
> To: address@hidden
> Subject: [bug-gawk] Gawk Enhancement Suggestion
>
> Arnold - could we get a "cut()" function for gawk similar to the UNIX
> one of the same name that just lets people select specific fields or
> ranges of fields? Below is some details (copied from something I posted
> at comp.lang.awk).
>
> Regards,
>
> Ed.
>
> A function that returns a string of selected fields is very often all we
> need. e.g.:
>
> print cut($0,3) # print from the 3rd field to the end of the record
> using
> FS as separator
> print cut($0,3,",") # print from the 3rd field to the end of the record
> using
> "," as separator
> print cut($0,"3-7") # print from the 3rd field to the 7th field
> print cut($0,"3,5,7") # print the 3rd, 5th, and 7th fields
>
> The separating substring between the fields would just be whatever separator
> preceeded the trailing fields. So, with this input (with leading blanks):
>
> a b c d
>
> the following code snippets would produce the output that follows them:
>
> print cut($0,"1,3")
> a c
>
> print cut($0,"1,3",/[[:blank:]]+/)
> b
>
> print cut($0,"1-3")
> a b c
>
> print cut($0,"2,4")
> b d
>
> print cut($0,"1-4")
> a b c d
>
> Obviously $0 can be replaced by any string and cut() should take an optional
> 4th
> arg to specify the separator in it's returned string:
>
> print cut($0,"1,3",FS,OFS)
> a c
>
> print cut($0,"1,3",/[[:blank:]]+/,"#")
> #b
>
> print cut($0,"1-3",FS,OFS)
> a b c
>
> print cut($0,"2,4",FS,":")
> b:d
>
> print cut($0,"1-4",FS,"|")
> a|b|c|d
>