免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 9572 | 回复: 9
打印 上一主题 下一主题

awk中字符串比较的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-28 10:46 |只看该作者 |倒序浏览
10000000801001000019和10000000801001000020比较的结果竟然是相同的,如果改成00000000801001000019和00000000801001000020结果就是对的,是什么原因?

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
2 [报告]
发表于 2011-12-28 10:49 |只看该作者
回复 1# ilwmin


    你的代码是什么样子的

论坛徽章:
0
3 [报告]
发表于 2011-12-28 11:01 |只看该作者
本帖最后由 ilwmin 于 2011-12-28 11:01 编辑

回复 2# yinyuemi
  1. awk 'BEGIN { FS="\t"; OFS="\t";readFlg="0";outStr="";tmpStr="";outFlg="0";idFlg="0";logCm1="";}\
  2.      NR==FNR{\
  3.                 pgList[$1]=$2;\
  4.             }\
  5.      NR>FNR{\
  6.                 if(readFlg=="0"){\
  7.                     if(pgList[$33]==""){\
  8.                         print $2>"'$err_seqno'";\
  9.                         exit(1);\
  10.                     }\
  11.                     outStr=sprintf("%s",$0);\
  12.                     readFlg="1";\
  13.                     if(pgList[$33]=="'${LPFT_LPFT912_PROC_BATCH}'"){\
  14.                         print outStr>>"'${maza_file}'";\
  15.                         outFlg="1";\
  16.                         /*mmbid*/\
  17.                         diffArr[1]=$12;\
  18.                         print $12>>"'${mnbid_file}'";\
  19.                         idFlg="1";\
  20.                     }else{\
  21.                         /*mmbid*/\
  22.                         diffArr[1]=$12;\
  23.                         /*pg_id*/\
  24.                         diffArr[2]=pgList[$33];\
  25.                         /*updt*/\
  26.                         diffArr[3]=$34;\
  27.                     }\
  28.                 }else{\
  29.                     if(pgList[$33]==""){\
  30.                         print $2>"'$err_seqno'";\
  31.                         exit(1);\
  32.                     }\
  33.                     [color=Red]if(diffArr[1]==$12)[/color]{\
  34.                         if(outFlg=="0"){\
  35.                             tmpStr=sprintf("%s",$0);\
  36.                             outStr=outStr"\n"tmpStr;\
  37.                             if(pgList[$33]=="'${LPFT_LPFT912_PROC_BATCH}'"){\
  38.                                 print outStr>>"'${maza_file}'";\
  39.                                 outStr="";\
  40.                                 outFlg="1";\
  41.                                 if(idFlg=="0"){\
  42.                                     print $12>>"'${mnbid_file}'";\
  43.                                     idFlg="1";\
  44.                                 }\
  45.                             }else if(pgList[$33] != diffArr[2] && diffArr[3] == $34){\
  46.                                 print outStr>>"'${maza_file}'";\
  47.                                 outFlg="1";\
  48.                                 if(idFlg=="0"){\
  49.                                     print $12>>"'${mnbid_file}'";\
  50.                                     idFlg="1";\
  51.                                 }\
  52.                             }else{\
  53.                                 diffArr[1]=$12;\
  54.                                 diffArr[2]=pgList[$33];\
  55.                                 diffArr[3]=$34;\
  56.                             }\
  57.                         }else{\
  58.                             print $0>>"'${maza_file}'";\
  59.                         }\
  60.                     }else{\
  61.                         outFlg="0";\
  62.                         idFlg="0";\
  63.                         outStr="";\
  64.                         tmpStr="";\
  65.                         outStr=sprintf("%s",$0);\
  66.                         if(pgList[$33]=="'${LPFT_LPFT912_PROC_BATCH}'"){\
  67.                             print outStr>>"'${maza_file}'";\
  68.                             outFlg="1";\
  69.                             /*mmbid*/\
  70.                             diffArr[1]=$12;\
  71.                             print $12>>"'${mnbid_file}'";\
  72.                             idFlg="1";\
  73.                         }else{\
  74.                             /*mmbid*/\
  75.                             diffArr[1]=$12;\
  76.                             /*pg_id*/\
  77.                             diffArr[2]=pgList[$33];\
  78.                             /*updt*/\
  79.                             diffArr[3]=$34;\
  80.                         }\
  81.                     }\
  82.                 }\
  83.             }' $pgid_file $meisa_file
复制代码

论坛徽章:
0
4 [报告]
发表于 2011-12-28 11:04 |只看该作者
回复 2# yinyuemi
代码看起来有些乱,问题就出在29行。
逻辑肯定没问题,都已经测试完成了,但后来上线之后发现跑出来的数据不对。发现就是那个比较出问题了,我把所有又来比较的数据的第一位由1变成0,结果就都对了。很奇怪

   

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
5 [报告]
发表于 2011-12-28 11:18 |只看该作者
本帖最后由 jason680 于 2011-12-28 11:18 编辑

回复 1# ilwmin

数值比较字符串比较,结果不同.
$ echo '10000000801001000019 10000000801001000020
00000000801001000019 00000000801001000020' | awk '{if($1==$2)print $1" is equal to "$2;else print $1" is not equal to "$2}'
10000000801001000019 is equal to 10000000801001000020
00000000801001000019 is not equal to 00000000801001000020

$ echo '10000000801001000019 10000000801001000020
00000000801001000019 00000000801001000020' | awk '{if($1""==$2"")print $1" is equal to "$2;else print $1" is not equal to "$2}'
10000000801001000019 is not equal to 10000000801001000020
00000000801001000019 is not equal to 00000000801001000020

   
dragon23452345 该用户已被删除
6 [报告]
发表于 2011-12-28 11:27 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
3
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:51:162015年亚洲杯之阿曼
日期:2015-04-07 20:00:59
7 [报告]
发表于 2011-12-28 12:38 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
8 [报告]
发表于 2011-12-28 12:47 |只看该作者
回复 1# ilwmin


    可能awk自动转为数值型了,并且字符串的长度已经超过awk数值型的长度,随便加个字符转换为字符串比较应该没问题,比如
  1. echo '10000000801001000019 10000000801001000020' |awk '{a=$1;b=$2;print 0a==0b}'
  2. 0
复制代码

论坛徽章:
0
9 [报告]
发表于 2011-12-28 12:51 |只看该作者
回复 8# yinyuemi

应该就是这原因,现在比较的时候我在前面加了一个“A"就没问题了。谢谢了。
   

论坛徽章:
0
10 [报告]
发表于 2011-12-28 12:54 |只看该作者
回复 5# jason680
问题已经解决了,谢谢回复。

   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP