免费注册 查看新帖 |

Chinaunix

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

[文本处理] awk挑取目标信息 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-02-14 13:23 |只看该作者 |倒序浏览
本帖最后由 iamline 于 2014-02-14 13:26 编辑

我有一个文件,如下:
  1. g1.t1        gi|6322029            beta-fructofuranosidase SUC2         100%
  2. g1.t1        gi|151943004        invertase          100%
  3. g1.t1        gi|190406374        invertase 2 external form precursor         100%
  4. g1.t1        gi|259147091        Suc2p              100%
  5. g1.t1        gi|256270229        Suc2p              100%
  6. g2.t1        gi|8980428            cytochrome oxidase subunit II         100%
  7. g2.t1        gi|50812098            cytochrome c oxidase subunit 2         100%
  8. g2.t1        gi|491103312        putative cytochrome c oxydase, subunit 2 (mitochondrion)        99%
  9. g2.t1        gi|57790532            putative cytochrome c oxydase, subunit 2        99%
  10. g3.t1        gi|50304021            hypothetical protein         97%
  11. g3.t1        gi|367009920        hypothetical protein TDEL_0B01210         98%
  12. g3.t1        gi|50294508            hypothetical protein         98%
  13. g3.t1        gi|410074219        hypothetical protein KAFR_0A01180         97%
  14. g3.t1        gi|365987047        hypothetical protein NDAI_0E02950         97%
  15. g4.t1        gi|50312033            hypothetical protein         92%
  16. g4.t1        gi|410080105        hypothetical protein KAFR_0E03460         79%
  17. g4.t1        gi|254581928        ZYRO0D11858p         77%
  18. g4.t1        gi|410080103        hypothetical protein KAFR_0E03450         78%
  19. g4.t1        gi|444319104        hypothetical protein TBLA_0D01820         79%
  20. g5.t1        gi|1730047            RecName: Full=Hexose transporter 2  permease         76%
  21. g6.t1        gi|1730047            RecName: Full=Hexose transporter 2  permease         91%
  22. g6.t1        gi|1730047            RecName: Full=Hexose transporter 2  permease         91%
  23. g6.t1        gi|255714649        KLTH0E02772p         89%
  24. g6.t1        gi|50284831            hypothetical protein         89%
  25. g6.t1        gi|50284831            hypothetical protein         88%
  26. g7.t1        gi|42521636            beta-D-galactosidase         86%
  27. g7.t1        gi|50304489            hypothetical protein         86%
复制代码
想进行如下处理:以$1为key(同一个key一般有多行),key相同时比较$3(信息列),如果$3不是hypothetical protein,则输出每个key的第一个信息行,余下的行舍弃; 但是如果$3是hypothetical protein,则往下匹配第二行,第三行……若碰到排在最前的第一个不是hypothetical protein的行,则输出; 若全部都是hypothetical protein,则还是输出第一个信息行

得到如下的结果:
  1. g1.t1        gi|6322029        beta-fructofuranosidase SUC2         100%
  2. g2.t1        gi|8980428        cytochrome oxidase subunit II         100%
  3. g3.t1        gi|50304021        hypothetical protein         97%
  4. g4.t1        gi|254581928        ZYRO0D11858p         77%
  5. g5.t1        gi|1730047        RecName: Full=Hexose transporter 2  permease         76%
  6. g6.t1        gi|1730047        RecName: Full=Hexose transporter 2  permease         91%
  7. g7.t1        gi|42521636        beta-D-galactosidase         86%
复制代码
期待各大侠指点啊!!

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
2 [报告]
发表于 2014-02-14 13:48 |只看该作者
本帖最后由 ly5066113 于 2014-02-14 14:28 编辑

回复 1# iamline


try:
  1. awk '$1!=s||(!/hypothetical/&&!b[$1]++&&a[$1]~/hypothetical/){a[$1]=$0}{s=$1}END{for(i in a)print a[i]}' file
复制代码

论坛徽章:
71
15-16赛季CBA联赛之同曦
日期:2018-08-23 15:41:42辰龙
日期:2014-08-15 09:07:43狮子座
日期:2014-06-03 13:55:33亥猪
日期:2014-06-02 11:17:08巨蟹座
日期:2014-05-06 10:02:03午马
日期:2014-05-04 08:18:27亥猪
日期:2014-04-29 11:11:32技术图书徽章
日期:2014-04-24 15:51:26技术图书徽章
日期:2014-04-17 11:01:53辰龙
日期:2014-04-15 12:45:46亥猪
日期:2014-04-11 09:06:23射手座
日期:2014-04-01 15:28:10
3 [报告]
发表于 2014-02-14 14:03 |只看该作者
回复 2# ly5066113

     讲下代码,谢谢!
   

论坛徽章:
0
4 [报告]
发表于 2014-02-14 14:17 |只看该作者
ly5066113 发表于 2014-02-14 13:48
回复 1# iamline


我试了一下,g4.t1 的输出不满足,想要输出的是这一行  g4.t1        gi|254581928        ZYRO0D11858p         77%

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
5 [报告]
发表于 2014-02-14 14:19 |只看该作者
本帖最后由 jason680 于 2014-02-14 15:09 编辑

回复 1# iamline

g[] for "got it" flag array
s[] for output string array
c[] for count array for $1 key to save data sequence

$ awk '!g[$1]{if(s[$1]==""){c[++t]=$1;s[$1]=$0};if($3!="hypothetical"){s[$1]=$0;g[$1]=1}}END{for(n=1;n<=t;n++)print s[c[n]]}' FILE
g1.t1        gi|6322029            beta-fructofuranosidase SUC2         100%
g2.t1        gi|8980428            cytochrome oxidase subunit II         100%
g3.t1        gi|50304021            hypothetical protein         97%
g4.t1        gi|254581928        ZYRO0D11858p         77%
g5.t1        gi|1730047            RecName: Full=Hexose transporter 2  permease         76%
g6.t1        gi|1730047            RecName: Full=Hexose transporter 2  permease         91%
g7.t1        gi|42521636            beta-D-galactosidase         86%

   

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
6 [报告]
发表于 2014-02-14 14:29 |只看该作者
回复 3# zhaopingzi


$1 第一次出现的行,用 a[$1]=$0 记录。
非 hypothetical 的 $1 第一次出现的行,如果 a[$1] 包含 hypothetical 则替换 a[$1] 为当前行。

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
7 [报告]
发表于 2014-02-14 14:30 |只看该作者
回复 4# iamline


已修正。

论坛徽章:
71
15-16赛季CBA联赛之同曦
日期:2018-08-23 15:41:42辰龙
日期:2014-08-15 09:07:43狮子座
日期:2014-06-03 13:55:33亥猪
日期:2014-06-02 11:17:08巨蟹座
日期:2014-05-06 10:02:03午马
日期:2014-05-04 08:18:27亥猪
日期:2014-04-29 11:11:32技术图书徽章
日期:2014-04-24 15:51:26技术图书徽章
日期:2014-04-17 11:01:53辰龙
日期:2014-04-15 12:45:46亥猪
日期:2014-04-11 09:06:23射手座
日期:2014-04-01 15:28:10
8 [报告]
发表于 2014-02-14 14:54 |只看该作者
回复 6# ly5066113


       当开始执行第一行时是不是因为没执行到s=$1,所以s=0?

论坛徽章:
0
9 [报告]
发表于 2014-02-14 14:55 |只看该作者
jason680 发表于 2014-02-14 14:19
回复 1# iamline

g[] for "got it" flag array


非常感谢,就是写得太高端了,看不是很明白  

论坛徽章:
0
10 [报告]
发表于 2014-02-14 15:02 |只看该作者
ly5066113 发表于 2014-02-14 13:48
回复 1# iamline


实在太感谢了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP