Can anyone tell me what's wrong here...


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Can anyone tell me what's wrong here...
# 15  
Old 03-20-2013
@MadeInGermany: You first result does not work? I get:

Code:
$ echo 0 | awk '{B=$1; print (B?"YES":"NO")}'
NO
$ echo 0 | awk '{B=$1; print (B""?"YES":"NO")}'
YES
$ echo 0 | awk '{B=$1; print (B!=""?"YES":"NO")}'
YES
$ echo 0 | awk '{B=$1""; print B?"YES":"NO"}'
YES

# 16  
Old 03-20-2013
Depends on the awk version.
Solaris /usr/xpg4/bin/awk says NO, nawk and gawk say YES:
Code:
echo 0 | /usr/xpg4/bin/awk '{B=$1; print (B!=""?"YES":"NO")}'
NO

This User Gave Thanks to MadeInGermany For This Post:
# 17  
Old 03-20-2013
I found the following regarding the B!="" case:
Quote:
Comparisons (with the '<' , "<=" , "!=" , "==" , '>' , and ">=" operators) shall be made numerically if both operands are numeric, if one is numeric and the other has a string value that is a numeric string, or if one is numeric and the other has the uninitialized value. Otherwise, operands shall be converted to strings as required and a string comparison shall be made using the locale-specific collation sequence. The value of the comparison expression shall be 1 if the relation is true, or 0 if the relation is false.
Expressions in awk

--edit--

I narrowed it down to:

Code:
$ /usr/xpg4/bin/awk 'BEGIN{print (0==""?"YES":"NO")}'
YES
$ /usr/xpg4/bin/awk 'BEGIN{print ("0"==""?"YES":"NO")}'
NO
$ nawk 'BEGIN{print (0==""?"YES":"NO")}'
NO
$ nawk 'BEGIN{print ("0"==""?"YES":"NO")}'
NO

$ gawk 'BEGIN{print (0==""?"YES":"NO")}'
NO
$ gawk 'BEGIN{print ("0"==""?"YES":"NO")}'
NO
$ gawk4 'BEGIN{print (0==""?"YES":"NO")}'
NO
$ gawk4 'BEGIN{print ("0"==""?"YES":"NO")}'
NO
$ bwk 'BEGIN{print (0==""?"YES":"NO")}'
NO
$ bwk 'BEGIN{print ("0"==""?"YES":"NO")}'
NO
$ mawk 'BEGIN{print (0==""?"YES":"NO")}'
NO
$ mawk 'BEGIN{print ("0"==""?"YES":"NO")}'
NO


Last edited by Scrutinizer; 03-20-2013 at 10:04 AM..
This User Gave Thanks to Scrutinizer For This Post:
# 18  
Old 03-20-2013
So what applies here?
I think:
Quote:
Otherwise, operands shall be converted to strings as required and a string comparison shall be made using the locale-specific collation sequence.
In this case "0"!="" -> YES, and there is a bug in Solaris /usr/xpg4/bin/awk.
Do you agree?
# 19  
Old 03-20-2013
It would not be the first bug is solaris awk... ( I dont remember what but I suffered from one two year ago...) but this is more of a nuisance because I tend to use /usr/xpg4/bin/awk for it seemed less buggy...
thanks to both of you for such a in deep investigation!
# 20  
Old 03-20-2013
Quote:
Originally Posted by MadeInGermany
So what applies here?
I think:

In this case "0"!="" -> YES, and there is a bug in Solaris /usr/xpg4/bin/awk.
Do you agree?
I think it isn't an actual bug, but rather a matter of strict conformance to historical standards..

/usr/xpg4/bin/awk conforms to the older POSIX.2/POSIX.2a/XPG4 standards.

I found this piece in the latest POSIX.1-2008:
Quote:
The description for comparisons in the ISO POSIX-2:1993 standard did not properly describe historical practice because of the way numeric strings are compared as numbers. The current rules cause the following code:

Code:
if (0 == "000")
    print "strange, but true"
else
    print "not true"

to do a numeric comparison, causing the if to succeed. It should be intuitively obvious that this is incorrect behavior, and indeed, no historical implementation of awk actually behaves this way.

To fix this problem, the definition of numeric string was enhanced to include only those values obtained from specific circumstances (mostly external sources) where it is not possible to determine unambiguously whether the value is intended to be a string or a numeric.
Expressions in awk

Last edited by Scrutinizer; 03-20-2013 at 07:17 PM..
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Why result is wrong here ? whether break statement is wrong ?

Hi ! all I am just trying to check range in my datafile pls tell me why its resulting wrong admin@IEEE:~/Desktop$ cat test.txt 0 28.4 5 28.4 10 28.4 15 28.5 20 28.5 25 28.6 30 28.6 35 28.7 40 28.7 45 28.7 50 28.8 55 28.8 60 28.8 65 28.1... (2 Replies)
Discussion started by: Akshay Hegde
2 Replies

2. UNIX for Advanced & Expert Users

What am I doing wrong here?

I am working on a simple login ID check shell script that should prompt for a user ID then check to see if this user is logged on. Trying to get the hang of this stuff so I am thinking of my own little projects. #! /bin/sh echo "please enter a user name" read user if user=$user then... (3 Replies)
Discussion started by: jsk319342
3 Replies

3. UNIX for Dummies Questions & Answers

What is wrong in here ???

]#PATH=/usr/bin:/etc:/bin:/boot/grub:/boot/grup/bin: /boot/solaris/bin:/sbin:/usr/openwin/bin:/usr/5bin://usr/X11/bin:/usr/apache/bin:/usr/apache2/bin:/usr/appserver/bin:... (9 Replies)
Discussion started by: microbot
9 Replies

4. Shell Programming and Scripting

what I m doing wrong?

when user select option 2 nothing happen.for testing purpose I put echo command but is not executing . basically when user prompt for option 2,I want to get list of database name from user separeted by space (TEST DEVL) and put into the file seprated by new line TEST DEVL after that stay on... (1 Reply)
Discussion started by: okreporthai
1 Replies

5. UNIX for Dummies Questions & Answers

what is wrong with this tr -d?

here is my command in bash shell on Mac OS X tiger: history | tr -d emacs here is what I get: hitory | grp "" | tr -d "" hitory | grp "" | tr -d """" hitory | grp "" | tr -d '' hitory | grp "" | tr -d '' hitory | grp "" | tr -d '' hitory | grp "" | tr -d... (3 Replies)
Discussion started by: cleansing_flame
3 Replies

6. UNIX for Dummies Questions & Answers

What am I doing wrong?

I really just mess around in UNIX, for the most part, when I want to get something done. I can usually piece things together by searching for brief how-to's on Google, but the syntax errors in my following .sh file are really confusing me. I've got lots of programming experience in other places, so... (7 Replies)
Discussion started by: demonpants
7 Replies

7. UNIX for Dummies Questions & Answers

what is wrong here

Hello, I have a simple script such as ----------------------------- #! /bin/sh YEAR=`date -u +%Y`; MONTH=`date -u +%m`; DAY=`date -u +%d`; DATE=$MONTH$DAY$YEAR LOGFILES=auditTrail-$DATE LOGMATCH=$LOGFILES\* ARGUM='' # find all files and write them to a file find . -name... (7 Replies)
Discussion started by: arushunter
7 Replies

8. Shell Programming and Scripting

Anything wrong with this

Does anyone see anything wrong with this. #getInfraFiles() #{ # cd Infra/$DAY # rm * # /usr/bin/ftp -i -n $LINE << cmd # user "$USER" "$PASSWD" # cd $INFRAPATH # binary # mget * # bye #} besides that its commented out (4 Replies)
Discussion started by: rcunn87
4 Replies

9. UNIX for Dummies Questions & Answers

Please tell me what do I do wrong here!

#!/usr/bin/csh # DAY=`date +%y%m%d` H=`date +%H` M=`date +%M` mailx -s "$H-Myfile" email@email.com</home/mydir/myfile Thanks! (4 Replies)
Discussion started by: bobo
4 Replies

10. UNIX for Advanced & Expert Users

What am I doing wrong

When I execute following shell script I am getting the following error syntax error at line 50 : `<<' unmatched What am I doing wrong :confused: Script begins here ---------------- MPAN_FILE=$1 exec 3<$MPAN_FILE ... (2 Replies)
Discussion started by: guptan
2 Replies
Login or Register to Ask a Question