免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: zcsgamer
打印 上一主题 下一主题

[文本处理] 如何在排序后保存行号和次序信息 [复制链接]

论坛徽章:
7
亥猪
日期:2013-10-10 17:00:29辰龙
日期:2013-10-12 16:23:19卯兔
日期:2013-11-18 17:01:27金牛座
日期:2014-09-09 10:17:052015七夕节徽章
日期:2015-08-21 11:06:172015亚冠之柏太阳神
日期:2015-09-25 13:56:42数据库技术版块每日发帖之星
日期:2016-08-06 06:20:00
11 [报告]
发表于 2014-07-30 17:17 |只看该作者
shell解决不了;就用sql啊;sql很容易啊 。
得到的结果;第2列就是 rownum
                  第3列就是dense_rank() over (order by --);

论坛徽章:
1
巨蟹座
日期:2014-06-10 23:03:47
12 [报告]
发表于 2014-07-30 17:27 |只看该作者
大概是这样吧,用了管道
  1. [admin@BJWS-29-63 ~]$ cat file
  2. 3
  3. 2
  4. 2
  5. 1
  6. [admin@BJWS-29-63 ~]$ cat file|awk '{print NR" "$0}'|sort -nk2|awk '{print $2,$1,a[$2]++?i:++i}'
  7. 1 4 1
  8. 2 2 2
  9. 2 3 2
  10. 3 1 3
复制代码

论坛徽章:
7
亥猪
日期:2013-10-10 17:00:29辰龙
日期:2013-10-12 16:23:19卯兔
日期:2013-11-18 17:01:27金牛座
日期:2014-09-09 10:17:052015七夕节徽章
日期:2015-08-21 11:06:172015亚冠之柏太阳神
日期:2015-09-25 13:56:42数据库技术版块每日发帖之星
日期:2016-08-06 06:20:00
13 [报告]
发表于 2014-07-30 17:33 |只看该作者
本帖最后由 li0924 于 2014-07-30 18:06 编辑
  1. awk '{b[$0]++;a[$0,b[$0]]=NR}END{for(i=1;i<=asorti(b,c);i++){for(j=1;j<=b[c[i]];j++){print c[i],a[c[i],j],i}}}' a
  2. 1 1 1
  3. 2 3 2
  4. 2 4 2
  5. 5 2 3
  6. 8 5 4
  7. $ cat a
  8. 1
  9. 5
  10. 2
  11. 2
  12. 8
复制代码

论坛徽章:
780
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
14 [报告]
发表于 2014-07-30 17:53 |只看该作者
本帖最后由 Herowinter 于 2014-07-30 17:53 编辑

回复 1# zcsgamer

感觉最后列排序序号不对呀,应该是

1
2
2
4

吧,2个并列的2后,下一个还是3?

论坛徽章:
0
15 [报告]
发表于 2014-07-31 09:02 |只看该作者
q1208c 发表于 2014-07-30 16:48
回复 10# zcsgamer

还是perl吧.

接受建议,试试perl去。

论坛徽章:
0
16 [报告]
发表于 2014-07-31 09:02 |只看该作者
li0924 发表于 2014-07-30 17:17
shell解决不了;就用sql啊;sql很容易啊 。
得到的结果;第2列就是 rownum
                  第3列就是d ...

不想依赖于数据库。

论坛徽章:
0
17 [报告]
发表于 2014-07-31 09:03 |只看该作者
zhleiling 发表于 2014-07-30 17:27
大概是这样吧,用了管道

如果行数据中有空格,用sort排序会碰到很大的麻烦。

论坛徽章:
7
亥猪
日期:2013-10-10 17:00:29辰龙
日期:2013-10-12 16:23:19卯兔
日期:2013-11-18 17:01:27金牛座
日期:2014-09-09 10:17:052015七夕节徽章
日期:2015-08-21 11:06:172015亚冠之柏太阳神
日期:2015-09-25 13:56:42数据库技术版块每日发帖之星
日期:2016-08-06 06:20:00
18 [报告]
发表于 2014-07-31 09:04 |只看该作者
回复 17# zcsgamer
14楼的代码没有解决你的问题?


   

论坛徽章:
0
19 [报告]
发表于 2014-07-31 09:11 |只看该作者
li0924 发表于 2014-07-30 17:33

awk 的 asorti 函数,学习了

但还有一个问题请教,asorti 函数本身能不能以数字方式排序

论坛徽章:
0
20 [报告]
发表于 2014-07-31 09:12 |只看该作者
li0924 发表于 2014-07-31 09:04
回复 17# zcsgamer
14楼的代码没有解决你的问题?

兄台速度真快啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP