免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
21 [报告]
发表于 2014-07-31 09:13 |只看该作者
Herowinter 发表于 2014-07-30 17:53
回复 1# zcsgamer

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

这个没关系,只要能区分开次序就行。

论坛徽章:
33
荣誉会员
日期:2011-11-23 16:44:17天秤座
日期:2014-08-26 16:18:20天秤座
日期:2014-08-29 10:12:18丑牛
日期:2014-08-29 16:06:45丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17寅虎
日期:2014-09-11 14:24:21天蝎座
日期:2014-09-17 08:33:55IT运维版块每日发帖之星
日期:2016-04-17 06:23:27操作系统版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-24 06:20:0015-16赛季CBA联赛之天津
日期:2016-05-06 12:46:59
22 [报告]
发表于 2014-07-31 09:25 |只看该作者
回复 17# zcsgamer

可以试试 sqlite .

不是传统意义上的数据库.
   

论坛徽章:
1
巨蟹座
日期:2014-06-10 23:03:47
23 [报告]
发表于 2014-07-31 09:26 |只看该作者
我不知道你说的sort很大的麻烦是指什么,如果你数据里有空格,就请贴一些有空格的样例出来,话说sort也是可以指定定界符的。
  1. [root@APP zl]# cat file
  2. 3
  3. 2
  4. 2
  5. 4 5
  6. 6 7
  7. 1
  8. [root@APP zl]# cat file|awk '{print NR"|"$0}'|sort -nk2 -t'|' |awk -F'|' -vOFS="|" '{print $2,$1,a[$2]++?i:++i}'
  9. 1|6|1
  10. 2|2|2
  11. 2|3|2
  12. 3|1|3
  13. 4 5|4|4
  14. 6 7|5|5
复制代码
回复 18# zcsgamer


   

论坛徽章:
0
24 [报告]
发表于 2014-07-31 09:55 |只看该作者
本帖最后由 zcsgamer 于 2014-07-31 09:57 编辑
zhleiling 发表于 2014-07-31 09:26
我不知道你说的sort很大的麻烦是指什么,如果你数据里有空格,就请贴一些有空格的样例出来,话说sort也是可 ...

比如这个:
1 1 2
1 1 1

cat file|awk '{print NR"|"$0}' 中 $0 的数据很复杂,可能是单列,可能是n列,也可能是多列混杂,我的了解是sort不能在多列混杂的情况下正确排序,当然我的了解也可能是错误的

论坛徽章:
0
25 [报告]
发表于 2014-07-31 09:56 |只看该作者
q1208c 发表于 2014-07-31 09:25
回复 17# zcsgamer

可以试试 sqlite .

只想纯代码实现

论坛徽章:
33
荣誉会员
日期:2011-11-23 16:44:17天秤座
日期:2014-08-26 16:18:20天秤座
日期:2014-08-29 10:12:18丑牛
日期:2014-08-29 16:06:45丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17寅虎
日期:2014-09-11 14:24:21天蝎座
日期:2014-09-17 08:33:55IT运维版块每日发帖之星
日期:2016-04-17 06:23:27操作系统版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-24 06:20:0015-16赛季CBA联赛之天津
日期:2016-05-06 12:46:59
26 [报告]
发表于 2014-07-31 10:08 |只看该作者
回复 26# zcsgamer

sqlite 其实只依赖一个 sqlite.so, 是个动态库. 基于 yum 的系统上, 应该是标准配置的.

数据库其实只是一个文件, 可能也就在内存里.


另外, 纯代码实现, 最后会发现, 跟实现了个 简单数据库差不多了. 那么, 如果用 sql 语句能够更简单清楚的解决, 为什么要"重复发明轮子"呢?

   

论坛徽章:
0
27 [报告]
发表于 2014-07-31 10:18 |只看该作者
q1208c 发表于 2014-07-31 10:08
回复 26# zcsgamer

sqlite 其实只依赖一个 sqlite.so, 是个动态库. 基于 yum 的系统上, 应该是标准配置 ...

接受兄台建议,也试试sqlite。

论坛徽章:
1
巨蟹座
日期:2014-06-10 23:03:47
28 [报告]
发表于 2014-07-31 10:19 |只看该作者
zcsgamer 发表于 2014-07-30 15:36
我其实就是用shell解决不了才来发帖。

原意是用shell写一个批量下载网页,正则抓取后,按指定要求排 ...



按你之前的说法,你可以把每列输出到文件,说明你之前是能区分列的。你可以通过或使用文本中没有出现的分列符,比如 | ,来间隔各列,然后使用该分列符去做sort或者awk,就不会受到空格的影响了。

论坛徽章:
0
29 [报告]
发表于 2014-07-31 10:26 |只看该作者
zhleiling 发表于 2014-07-31 10:19
按你之前的说法,你可以把每列输出到文件,说明你之前是能区分列的。你可以通过或使用文本中没有出现 ...

能分列是因为在 sed 的时候,把每个捕获组输出到单独文件,实际上这里你说的这个分列,是逻辑列,不是物理列,每个捕获组文件中依然可能多列混杂,我这里可能没说清楚。

sort的分列符,奇怪的字符不接受,不奇怪的字符又因为捕获组中数据复杂(什么都有可能出现),所以也不能正确解决。

论坛徽章:
0
30 [报告]
发表于 2014-07-31 10:29 |只看该作者
现在大概有三种解决方案

1、perl
2、数据库
3、awk 的 asorti 函数,这个要另加条件,判断字符排序还是数字排序,稍复杂

感谢每一位的热心帮助,谢谢大家!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP