Is there an array version of $1...$NF in awk? -
consider following function in public domain.
function join(array, start, end, sep, result, i) { if (sep == "") sep = " " else if (sep == subsep) # magic value sep = "" result = array[start] (i = start + 1; <= end; i++) result = result sep array[i] return result }
i use function join contiguous columns such $2, $3, $4
start , end ranges variables.
however, in order this, must first convert fields array using loop following.
for (i = 1; <= nf; i++) { a[i] = $i }
or shorter version, @stevenpenny mentioned.
split($0, a)
unfortunately both approaches require creation of new variable.
does awk have built-in way of accessing columns array above manual conversions not necessary?
no such array defined in posix awk
(the array type special variables argv
, environ
).
none exists in gawk
either, though adds procinfo
, symtab
, functab
special arrays. can check defined variables , types @ runtime using symtab
array (gawk-4.1.0 feature):
begin { procinfo["sorted_in"]="@ind_str_asc" } # automagic sort "in" { print $0 } end { (ss in symtab) printf("%-12s: %s\n",procinfo["identifiers"][ss],ss) }
(though find symtab
, functab
missing list, , missing --dump-variables
too, treated specially design). gawk offers few standard loadable extensions, none implements feature though (and given dynamic relation ship between $0
, $1
..., nf
, ofs
, array had same functionality little tricky implement).
as suggested jidder, 1 work-around skip array altogether , use fields. there's nothing special field names, variable $n
can used same literal $1
(just take care use braces precedence in expressions $(nf-1)
. here's fjoin
function works on fields rather array:
function fjoin(start,end,sep, result,ii) { if (sep=="") sep=" " else if (sep==subsep) sep ="" result=$start (ii=start+1; ii<=end; ii++) result=result sep $ii return result } { print "2,4: " fjoin(2,4,":") }
(this not treat $0
special case)
or use split()
, happy, gawk @ least guarantees behaves identically field splitting (assuming none of fs
, fieldwidths
, possibly ignorecase
being modified change behaviour).
Comments
Post a Comment