软件开发: 06 2008存档

uniq失效?

| | Comments (0) | TrackBacks (0)
      用眼睛看都看出来文本文件里有相邻的两行是一模一样的,但用uniq命令就是不能去重,怪异。后来发现是系统的LC_ALL为空....执行 export LC_ALL=POSIX ,uniq恢复正常了。
看看这段php代码:

    $arr1=array();
 
    $arr1["8700"]="apple";
    $arr1["5300"]="banana";
 
    $arr2=array();

    var_dump($arr1);
    var_dump(array_merge($arr1,$arr2));

结果是:
array(2) {
  [8700]=>
  string(5) "apple"
  [5300]=>
  string(6) "banana"
}
array(2) {
  [0]=>
  string(5) "apple"
  [1]=>
  string(6) "banana"
}

        可见,“8700”和“5300”都被php的数组当成了数字,于是在数组合并的时候对这一“编号”进行了调整。我试了$arr1[strval("8700")]="apple",没有效果,array就是不把8700当成字符串。最好只好在8700前面加了个空格。
        最要命的是array_slice这么简单功能的函数也有这个毛病,擅自调整数组里数字型的key。看来以后要多加小心。
    BEGIN {
          list["a"]="apple";
          list["b"]="banana";
 
          if(list["c"]=="cat")
          {  
              print "Oh! A cat!";
          }  
      }
 
      END{
          for(var in list)
          {  
              print var","list[var];
          }  
      }
      
       输出结果是:
        a,apple
        b,banana
        c,
      
       我并没有向关联数组 list 中写入“c"这个key,但它却在里面,而且没有对应的value。可见awk中的关联数组只要你访问了,它就把key塞了进去,这一点与c++的map不同。
       就awk这一个特性,害我调试了两个小时,唉,以后还是要小心它的关联数组。