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