Web lists-archives.com

Re: Awk print statement alters the argument variable's content




On 2017-01-12 05:26, Lundberg Christer wrote:
> This program run with GNU awk 4.1.4 (currently installed with
> Cygwin):
> 
>   awk '
>     BEGIN { OFMT="%.8g"
>             buf = 1+0.1
>             buf = buf "a"
>             print "Length before print:", length(buf)
>             print buf " "
>             print buf
>             print buf " "
>             print "Length after print:", length(buf)
>           }
>   '
> 
> produces the following output on our system:
> 
> Length before print: 4
> 1.1a 
> 1.1
> 1.1 
> Length after print: 3
> 
> so it appears that the "print buf" statement unexpectedly alters the
> content of buf.
> With awk 4.1.3, we got the expected output
> 
> Length before print: 4
> 1.1a 
> 1.1a
> 1.1a 
> Length after print: 4

Confirmed problem with any OFMT except default or %.6g, also goes 
away if you change awk line 3 to: buf = "" buf "a":
 
$ uname -srvmo
CYGWIN_NT-10.0 2.6.1(0.305/5/3) 2016-12-16 11:55 x86_64 Cygwin
$ awk --version
GNU Awk 4.1.4, API: 1.1 (GNU MPFR 3.1.5, GNU MP 6.1.1)
Copyright (C) 1989, 1991-2016 Free Software Foundation.

-- 
Take care. Thanks, Brian Inglis, Calgary, Alberta, Canada

--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple