简单的awk字符串比较意外的结果

时间:2013-07-02 22:37:30

标签: awk

一般字符串比较,“A”> “a”是假的。

但是,我从这个awk执行中得到了意想不到的结果:

$ echo "A a"| awk '{if ($1 > $2) print "gt"; else print "leq"}'
gt

我错过了什么?

环境信息:

$ uname -r -s -v -M
AIX 1 6 IBM,9110-510

$ locale
LANG=en_AU.8859-15
LC_COLLATE="en_AU.8859-15"
LC_CTYPE="en_AU.8859-15"
LC_MONETARY="en_AU.8859-15"
LC_NUMERIC="en_AU.8859-15"
LC_TIME="en_AU.8859-15"
LC_MESSAGES="en_AU.8859-15"
LC_ALL=

诊断:

$ echo "A a"| awk '{print NF}'
2

更新设置LC_ALL = POSIX后产生正确的结果(感谢JS웃)。需要进一步调查。

1 个答案:

答案 0 :(得分:1)

我无法重现这一点但您可以通过将操作数与空字符串连接来强制进行字符串比较:

echo "A a"| awk '{if ($1"" > $2"") print "gt"; else print "leq"}'

注意: 与任何一个操作数连接就足够了。

更新

由于怀疑OP的locale设置导致了问题。设置LC_ALL=POSIX后问题已解决。