Skip to content

spurious syntax error with ? : in combination with print #233

@McDutchie

Description

@McDutchie

Found on comp.lang.awk:

From: jeojet@invalid.invalid
Newsgroups: comp.lang.awk
Subject: One True AWK bug?
Date: Thu, 9 May 2024 16:43:03 -0000 (UTC)
Organization: A noiseless patient Spider
Message-ID: <v1iuen$otom$1@dont-email.me>

Is this a bug in original-awk, aka "The One True Awk" ?

I noticed in this one-liner if the conditional in the print statement
below lacks parentheses it produces and "illegal statement" error:

--
$ printf 'foo\n\nbar\n' |nawk '{print $0 != "" ? $0 : "[blank]"}'
nawk: syntax error at source line 1
 context is
	{print $0 >>>  != <<< 
nawk: illegal statement at source line 1
nawk: illegal statement at source line 1
--

Adding parentheses OR rewriting as a match fixes things:

--
$ printf 'foo\n\nbar\n' |nawk '{print $0 !~ /^$/ ? $0 : "[blank]"}'
foo
[blank]
bar

$ printf 'foo\n\nbar\n' |nawk '{print ($0 != "") ? $0 : "[blank]"}'
foo
[blank]
bar
--

Both mawk and gawk don't seem to care about lack of parentheses:

--
$ printf 'foo\n\nbar\n' |mawk '{print $0 != "" ? $0 : "[blank]"}'
foo
[blank]
bar

$ printf 'foo\n\nbar\n' |gawk '{print $0 != "" ? $0 : "[blank]"}'
foo
[blank]
bar
--

Note 'nawk' here is NOT gawk, it's a more recent version of original-awk:

$ nawk --version    # from https://github.com/onetrueawk/awk
awk version 20240122 

$ original-awk --version  # version Debian apt currently has
awk version 20220912

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions