免费注册 查看新帖 |

Chinaunix

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

我的这种对数字排序操作如何实现啊? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-29 18:24 |只看该作者 |倒序浏览
1.txt 内容

100
101
134
137

2.txt 内容

99,122,135-136


我想得到3.txt

99-101,122,134-137


我的思路:
2.txt-->4.txt   
99
122
135
136

4.txt+1.txt= 5.txt
99
100
101
122
134
135
136
137
然后再变成我想要的3.TXT ,但是不知道怎么写SHELL

论坛徽章:
0
2 [报告]
发表于 2009-04-29 18:27 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
3 [报告]
发表于 2009-04-29 18:40 |只看该作者

  我就是想把1.txt 和 2.txt   内容合并成3.txt 而已
  连续的数字用“-”,不连续的数字用“,” 隔开
但是不知道该怎么做

论坛徽章:
0
4 [报告]
发表于 2009-04-29 18:51 |只看该作者
看明白了  但是暂时不会 等高人

论坛徽章:
0
5 [报告]
发表于 2009-04-29 19:18 |只看该作者
原帖由 cssjtuer 于 2009-4-29 18:51 发表
看明白了  但是暂时不会 等高人



你有什么思路啊?

论坛徽章:
0
6 [报告]
发表于 2009-04-29 19:22 |只看该作者
按你的思路写的,非常不美观,不过测试结果是对的,仅供参考。
在最后合并的时候用了三个变量进行状态记录,min是连续数字的最小值,max是连续数字的最大值,f是数字连续状态。

  1. awk -F, '{for(i=1;i<=NF;i++) if($i~"-") for(j=substr($i,1,index($i,"-")-1); j<=substr($i,index($i,"-")+1); j++) print j; else print $i}' 2.txt | cat 1.txt - | sort -n | awk 'NR==1{min=max=$0;f=0;next}{if($0==max+1){max=$0;f=1;next}else{if(f){printf min"-"max","; f=0; min=max=$0;}else{printf max","; min=max=$0}}}END{if(f)print min"-"max; else print max}'
复制代码

[ 本帖最后由 kwokcn 于 2009-4-29 19:30 编辑 ]

论坛徽章:
0
7 [报告]
发表于 2009-04-29 20:01 |只看该作者

回复 #1 loveoov 的帖子

awk '{RS="[, ]";FS="[- ]"}{if(/-/){for(i=$1;i<=$2;i++)print i}else{print}}' 1.txt  2.txt |sort -k 1n|awk '{if(NR==1){first=$1;printf $1}if(NR!=1){if($1!=first+1){if(first!=lastprint){print "-"first}else{printf "\n"};first=$1;printf first"";lastprint=first}else{first=$1}}}END{print "-"first}'

论坛徽章:
0
8 [报告]
发表于 2009-04-29 20:18 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
9 [报告]
发表于 2009-04-29 20:39 |只看该作者

回复 #1 loveoov 的帖子

awk '{RS="[, ]";FS="[- ]"}{if(/-/){for(i=$1;i<=$2;i++)print i}else{print}}' 1.txt  2.txt |sort -k 1n|awk '{if(NR==1){str=$1;n=1;printf $1" "}
else{
        if($1==str+n){n++}else{print n;printf $1" ";str=$1;n=1}
}}END{print n}'|awk '{if($2==1){printf $1","}else{printf $1"-"$1+$2-1","}}'

这样也许会比较好理解一点

论坛徽章:
0
10 [报告]
发表于 2009-04-29 20:40 |只看该作者
谢谢 都很好用
收下了
先研究研究 学习学习
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP