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

简单awk字符串比较意外结果,awk,Awk,在一般的字符串比较中,“A”>“A”为false 但是,我从这个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.885

在一般的字符串比较中,“A”>“A”为false

但是,我从这个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웃). 需要对此进行进一步研究。

我无法再现此结果,但您可以通过将操作数与空字符串串联来强制进行字符串比较:

echo "A a"| awk '{if ($1"" > $2"") print "gt"; else print "leq"}'
注意:与任何一个操作数串联就足够了

更新:
正如所怀疑的那样,OP的
locale
设置导致了问题。设置
LC_ALL=POSIX
后,问题得到了解决。

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

echo "A a"| awk '{if ($1"" > $2"") print "gt"; else print "leq"}'
注意:与任何一个操作数串联就足够了

更新:
正如所怀疑的那样,OP的
locale
设置导致了问题。设置
LC_ALL=POSIX
后,问题得到了解决。

如何查找awk版本?谢谢。
$awk--version awk:未识别标志:-用法:awk[-u][F Character][v Variable=Value][F File | Commands][Variable=Value | File…]
。有什么想法吗?我得到了leq(如预期的那样),所以它似乎与AIX或您正在传递的数据有关。您是否有可能在使用Unicode的编辑环境中创建了“A”?只是猜测。否则,请尝试其他比较,如
12
,以查看它是否特定于字符,或是否完全损坏。祝您好运。
12
很好。如何检查环境是否正常ses unicode?这意味着什么?你能在提示中键入
locale
并更新问题中的结果吗?我如何找到awk版本?谢谢。
$awk--version awk:未识别标志:-用法:awk[-u][F Character][v Variable=Value][F File | Commands][Variable=Value | File…][/code>。有什么想法吗?我得到了leq(如预期),所以它似乎与AIX或您正在传递的数据有关。您是否有可能在使用Unicode的编辑环境中创建了“A”?只是猜测。否则,请尝试其他比较,如
12
,以查看它是否特定于字符,或是否完全损坏。祝您好运。
12
很好。如何检查环境是否正常ses unicode?这意味着什么?你能在提示中键入
locale
并更新问题的结果吗?谢谢@shelter。调试是学习新事物的好方法。:)谢谢@shelter。调试是学习新事物的好方法。:)