免费注册 查看新帖 |

Chinaunix

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

[文本处理] 请教简化操作,谢谢! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-06-17 19:28 |只看该作者 |倒序浏览
请问如何简化以下操作:目的是提取文本中的某行作为标题行并排序。 out1.rar (236 Bytes, 下载次数: 7)

awk 'BEGIN{OFS=FS="\t"}{if($1 == "chrom") print $0}' out1.txt >h1.txt
awk 'BEGIN{OFS=FS="\t"}{if($1 != "chrom") print $0}' out1.txt >h2.txt
cat h1.txt h2.txt > h3.txt
(head -n 1 h3.txt && tail -n +2 h3.txt | sort -k1,1 -k2,2n) > last.txt

谢谢。

论坛徽章:
769
金牛座
日期: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
2 [报告]
发表于 2014-06-17 19:39 |只看该作者
回复 1# owwa
无法打开rar,爱莫能助了。。。
   

论坛徽章:
0
3 [报告]
发表于 2014-06-17 19:50 |只看该作者
回复 2# Herowinter

多谢,其实文本很简单:

chr1        13        14        +        0        1        0        2        0.05        19
chr1        33        34        +        0        1        0        1        0        17
chr1        34        35        -                0        0        1        0        24
chr1        210        211        +        0        1        0        2        0        20
chrom        chromstart        chromend        strand        o1        o2        p1        p2        q1        q2
chr1        211        212        -                0        0        1        0.09        23
chr1        217        218        -                0        0        1        0        23
chr1        231        232        +        0        1        0        2        0        20
chr1        232        233        -                0        0        1        0        24
chr1        253        254        -                0        0        1        0        23
chr1        363        364        -        0        21        0        11        0        8

论坛徽章:
769
金牛座
日期: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
4 [报告]
发表于 2014-06-17 20:02 |只看该作者
本帖最后由 Herowinter 于 2014-06-17 20:06 编辑

回复 1# owwa
  1. awk '$1!="chrom"{a[++m]=$0;next} {b[++n]=$0} END{for(i=1;i<=m;i++)print a[i];for(i=1;i<=n;i++)print b[i]}' out1.txt|sort -k1,1 -k2,2n
  2. chr1        13        14        +        0        1        0        2        0.05        19
  3. chr1        33        34        +        0        1        0        1        0        17
  4. chr1        34        35        -                0        0        1        0        24
  5. chr1        210        211        +        0        1        0        2        0        20
  6. chr1        211        212        -                0        0        1        0.09        23
  7. chr1        217        218        -                0        0        1        0        23
  8. chr1        231        232        +        0        1        0        2        0        20
  9. chr1        232        233        -                0        0        1        0        24
  10. chr1        253        254        -                0        0        1        0        23
  11. chr1        363        364        -        0        21        0        11        0        8
  12. chrom        chromstart        chromend        strand        o1        o2        p1        p2        q1        q2
复制代码

论坛徽章:
0
5 [报告]
发表于 2014-06-17 20:06 |只看该作者
回复 4# Herowinter

呵呵,谢谢,小复杂。

论坛徽章:
769
金牛座
日期: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
6 [报告]
发表于 2014-06-17 20:10 |只看该作者
回复 5# owwa
我觉得我2了,我以为你要保持文本本来的出现顺序,
好像直接排序就可以了?这样好像和你的last.txt的结果
也一样?
  1. sort -k1,1 -k2,2n out1.txt
  2. chr1        13        14        +        0        1        0        2        0.05        19
  3. chr1        33        34        +        0        1        0        1        0        17
  4. chr1        34        35        -                0        0        1        0        24
  5. chr1        210        211        +        0        1        0        2        0        20
  6. chr1        211        212        -                0        0        1        0.09        23
  7. chr1        217        218        -                0        0        1        0        23
  8. chr1        231        232        +        0        1        0        2        0        20
  9. chr1        232        233        -                0        0        1        0        24
  10. chr1        253        254        -                0        0        1        0        23
  11. chr1        363        364        -        0        21        0        11        0        8
  12. chrom        chromstart        chromend        strand        o1        o2        p1        p2        q1        q2
复制代码

论坛徽章:
0
7 [报告]
发表于 2014-06-17 20:15 |只看该作者
回复 6# Herowinter

希望是此行作为标题行:
12.chrom        chromstart        chromend        strand        o1        o2        p1        p2        q1        q2


   

论坛徽章:
0
8 [报告]
发表于 2014-06-17 20:17 |只看该作者
回复 6# Herowinter

直接排序不行的,因为还有很多很多不同的行,只是希望提取其中以chrom开头的行作为标题行。
   

论坛徽章:
769
金牛座
日期: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
9 [报告]
发表于 2014-06-17 20:19 |只看该作者
回复 7# owwa
这样?
  1. awk '$1=="chrom"{a[++m]=$0;next} {b[++n]=$0} END{for(i=1;i<=m;i++)print a[i];for(i=1;i<=n;i++)print b[i]|"sort -k1,1 -k2,2n"}' out1.txt
  2. chrom        chromstart        chromend        strand        o1        o2        p1        p2        q1        q2
  3. chr1        13        14        +        0        1        0        2        0.05        19
  4. chr1        33        34        +        0        1        0        1        0        17
  5. chr1        34        35        -                0        0        1        0        24
  6. chr1        210        211        +        0        1        0        2        0        20
  7. chr1        211        212        -                0        0        1        0.09        23
  8. chr1        217        218        -                0        0        1        0        23
  9. chr1        231        232        +        0        1        0        2        0        20
  10. chr1        232        233        -                0        0        1        0        24
  11. chr1        253        254        -                0        0        1        0        23
  12. chr1        363        364        -        0        21        0        11        0        8
复制代码
PS: 你现在的out1.txt基本已经按2,3列排好序了。
   

论坛徽章:
0
10 [报告]
发表于 2014-06-17 20:31 |只看该作者
本帖最后由 owwa 于 2014-06-18 08:05 编辑

回复 9# Herowinter

多谢兄弟! 略显复杂。
   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP