Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3027841
  • 博文数量: 272
  • 博客积分: 5544
  • 博客等级: 大校
  • 技术积分: 5496
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-08 00:48
个人简介

  每个人都要有一个骨灰级的爱好,不为金钱,而纯粹是为了在这个领域享受追寻真理的快乐。

文章分类

全部博文(272)

文章存档

2015年(2)

2014年(5)

2013年(25)

2012年(58)

2011年(182)

分类: LINUX

2011-07-18 22:28:16

  1. echo "8 11111 9" | awk '{for(i=1;i<=NF;i++)a[$i]=$i;for(j=1;j<=asorti(a,b);j++)printf a[b[j]] FS;printf RS;delete a}'
  2. 11111 8 9


  3. echo "8 11111 9" | awk '{for(i=1;i<=NF;i++)a[$i]=$i;for(j=1;j<=asort(a);j++)printf a[j] FS;printf RS;delete a}'
  4. 8 9 11111

[解析]

  都是awk的内置排序函数(升序排列),结果是有区别的,是什么因素造成它们的差别呢?首先来看 asorti ,它是根据字符串来排序的,8的内码是0x38,而1是0x31,字符串比较肯定是先比较第一个字符,那么11111就排在了8之前,尽管数值上11111比8大许多。而 asort 则是按照数值的大小来排列的。

 

我们再看它们之间的第二个区别:

  1. $ cat file
  2. aaa 125
  3. ddd 123
  4. bbb 128
  5. ccc 120

  6. $ awk '{a[$2]=$0}END{for(i=1;i<=asort(a);i++)print a[i]}' file
  7. aaa 125
  8. bbb 128
  9. ccc 120
  10. ddd 123

  11. $ awk '{a[$2]=$0}END{for(i=1;i<=asorti(a,b);i++)print a[b[i]]}' file
  12. ccc 120
  13. ddd 123
  14. aaa 125
  15. bbb 128

[解析]

    同样都是对第2列的数字进行排序为什么结果完全不一样?原来asort是对数组的值进行排序,而asorti是对数组的下标进行排序。

阅读(7797) | 评论(3) | 转发(2) |
给主人留下些什么吧!~~

timesize2012-11-11 20:35:11

讲的很好

xiaolmail2012-10-24 12:06:39

aaa 9
ddd 123
bbb 128
ccc 120
这样的怎么排

blackold2011-07-18 23:01:38

支持