免费注册 查看新帖 |

Chinaunix

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

对文本复杂排序,怎么解决? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-12-22 21:48 |只看该作者 |倒序浏览
有一个格式的数据文件,tab键隔开,现在要对第二列,和第三列排序,再写入另一个文件。先按第二列排序,在第二列的基础上,再按数字由大到小排第三列。搜索 试了很多方法都不行啊。

sort -k2,2 -k3,3 -n file1 > file2

数据:
1        chr1    1    75
1        chr2    2    45
1        chr3    3    75
2        chr3    5    55
2        chr2    4    75
1        chr4    1    45
2        chr1    2    75
1        chrM    4    75
1        chr2    15   45
1        chr2    35   75
1        chr3    68   75
2        chr4    15   45
1        chr1    5    75
1        chr1    8    75
1        chr2    3    75
1        chr1    11   45
2        chr3    5    75
1        chr1    12   75
2        chr4    45   45
1        chrM    3    75
2        chrM    3    45
1        chrM    18   75
1        chr3    12   75
1        chr2    15   75
结果:
1        chr1    1     75
1        chr1    2      45
1        chr1    3     75
2        chr1    5     55
2        chr1    9     75
1        chr1    12    45
2        chr1    21    75
1        chr1    42    75
1        chr2    1     45
1        chr2    5     75
1        chr2    16   75
2        chr2    25   45
......

论坛徽章:
0
2 [报告]
发表于 2010-12-22 22:00 |只看该作者
# sort -k 2,2 -k 3,3nr cu.txt
1        chr1    12   75
1        chr1    11   45
1        chr1    8    75
1        chr1    5    75
2        chr1    2    75
1        chr1    1    75
1        chr2    35   75
1        chr2    15   45
1        chr2    15   75
2        chr2    4    75
1        chr2    3    75
1        chr2    2    45
1        chr3    68   75
1        chr3    12   75
2        chr3    5    55
2        chr3    5    75

论坛徽章:
0
3 [报告]
发表于 2010-12-22 23:45 |只看该作者
谢谢,看来那几个参数的位置和空格都很重要啊。

论坛徽章:
0
4 [报告]
发表于 2010-12-25 10:33 |只看该作者
[i=s] 本帖最后由 yxlhit2010 于 2010-12-25 10:39 编辑 [/i]

2楼给的方法对么?没感觉符合楼主的要求阿
我这里有个方法比较笨我写成了脚本。。。。
[code]#!/bin/bash
sort -k2 testfile| awk '{f=$2;print $0>f}'
for i in chr*
do
sort -n -k3 $i >>$$tmp
done
cat $$tmp
rm $$tmp
[/code]
怕误删除生成的chr1chr2chr3chrM文件,未填加删除语句楼主自行处理把

论坛徽章:
0
5 [报告]
发表于 2010-12-25 10:37 |只看该作者
运行结果如下
  1. 1        chr1    1    75
  2. 2        chr1    2    75
  3. 1        chr1    5    75
  4. 1        chr1    8    75
  5. 1        chr1    12   75
  6. 1        chr2    2    45
  7. 1        chr2    3    75
  8. 2        chr2    4    75
  9. 1        chr2    15   75
  10. 1        chr2    35   75
  11. 1        chr3    3    75
  12. 2        chr3    5    55
  13. 2        chr3    5    75
  14. 1        chr3    68   75
  15. 2        chr4    15   45
  16. 2        chr4    45   45
  17. 1        chrM    3    75
  18. 2        chrM    3    45
  19. 1        chrM    4    75
复制代码

论坛徽章:
0
6 [报告]
发表于 2010-12-25 13:45 |只看该作者
回复 5# yxlhit2010


   原话: 先按第二列排序,在第二列的基础上,再按数字由大到小第三列

   你看清楚了吗?

论坛徽章:
0
7 [报告]
发表于 2010-12-25 18:52 |只看该作者
本帖最后由 yxlhit2010 于 2010-12-25 19:07 编辑

不好意思是我看错了,学习了,谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP