免费注册 查看新帖 |

Chinaunix

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

[文本处理] shell [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-12-25 14:59 |只看该作者 |倒序浏览
大家好:我有这样一个文件a.fasta:
>chr10:117704304-117704335(-)
CCAGAGCAGCCAGGGCTACACAGAGAAACCC
>chr10:117704309-117704340(-)
GAGTTCCAGAGCAGCCAGGGCTACACAGAGA
>chr10:117704310-117704341(-)
TGAGTTCCAGAGCAGCCAGGGCTACACAGAG
>chr10:117704313-117704344(-)
GAGTGAGTTCCAGAGCAGCCAGGGCTACACA
>chr10:117704318-117704349(-)
CTACAGAGTGAGTTCCAGAGCAGCCAGGGCT
可以看到该文件每两行代表一个数据。单数行以“>”开头,偶数行是一些字母,每行31个,而且中间一个都是C.

接下来我要做的是提取符合以下条件的行:第6到13个字母只能是A或者T,第19到26个字母也只能是A或者T的行,并输出与之对应的单数行。

希望能得到大家的帮助,不知道我描述清楚了没有。
谢谢大家!

论坛徽章:
46
2015小元宵徽章
日期:2015-03-06 15:58:18羊年新春福章
日期:2015-04-14 10:37:422015年亚洲杯之阿曼
日期:2015-04-14 10:41:50NBA常规赛纪念章
日期:2015-05-04 22:32:03NBA季后赛大富翁
日期:2015-05-04 22:34:11菠菜明灯
日期:2015-05-04 22:35:49新奥尔良黄蜂
日期:2015-05-04 22:49:2315-16赛季CBA联赛之广夏
日期:2015-12-11 15:02:342015年亚洲杯之巴勒斯坦
日期:2015-03-04 19:56:562015年亚洲杯之阿联酋
日期:2015-03-04 11:19:04休斯顿火箭
日期:2015-03-02 16:32:11纽约尼克斯
日期:2015-03-02 16:09:04
2 [报告]
发表于 2014-12-25 16:04 |只看该作者
try:
awk --posix 'NR%2{a=$0;next}$0~/^.{5}[AT]{8}.{5}[AT]{8}/{print a;print $0}' file

论坛徽章:
60
20周年集字徽章-20	
日期:2020-10-28 14:04:3015-16赛季CBA联赛之北京
日期:2016-07-06 15:42:0715-16赛季CBA联赛之同曦
日期:2016-06-12 10:38:0915-16赛季CBA联赛之佛山
日期:2016-05-27 11:54:56黄金圣斗士
日期:2015-12-02 11:44:35白银圣斗士
日期:2015-11-25 14:32:43白银圣斗士
日期:2015-11-23 12:53:352015亚冠之布里斯班狮吼
日期:2015-10-21 16:55:482015亚冠之首尔
日期:2015-09-01 16:46:052015亚冠之德黑兰石油
日期:2015-08-31 11:39:192015亚冠之萨济拖拉机
日期:2015-08-28 21:06:5315-16赛季CBA联赛之广东
日期:2016-07-12 14:58:53
3 [报告]
发表于 2014-12-25 16:49 |只看该作者
  1. #!/usr/bin/python
  2. # -*- coding:utf8 -*-

  3. import re, sys, fileinput
  4. for line in fileinput.input(sys.argv[1]):
  5.     if fileinput.lineno() % 2 == 1: h = line.strip()
  6.     if re.match("^[AT]*$", line[5:13]) and re.match("^[AT]*$", line[18:26]):
  7.         print h
复制代码

论坛徽章:
30
申猴
日期:2014-04-10 09:43:532015年亚洲杯纪念徽章
日期:2015-03-20 14:40:232015亚冠之阿尔纳斯尔
日期:2015-06-02 18:59:042015亚冠之阿尔希拉尔
日期:2015-06-30 15:22:572015亚冠之大阪钢巴
日期:2015-07-20 10:44:332015亚冠之阿尔纳斯尔
日期:2015-10-28 14:57:5215-16赛季CBA联赛之新疆
日期:2015-12-25 10:18:45黑曼巴
日期:2016-06-26 21:39:5315-16赛季CBA联赛之山西
日期:2016-07-25 21:54:2715-16赛季CBA联赛之北京
日期:2016-10-27 12:07:2315-16赛季CBA联赛之八一
日期:2017-07-07 16:39:0915-16赛季CBA联赛之吉林
日期:2017-09-04 12:14:43
4 [报告]
发表于 2014-12-25 16:51 |只看该作者
回复 1# biobaby
  1. awk -v RS=">" 'NR>1{split($2,a,"");for (i=6;i<=13;i++) {if(a[i]=="A"||a[i]=="T") t++;} if(t==8) for (j=19;j<=26;j++) { if(a[j]=="A"||a[j]=="T") k++;} if(k==8) {print $1};t=0;k=0 }' file
复制代码

论坛徽章:
7
申猴
日期:2014-12-21 13:57:24巳蛇
日期:2014-12-25 22:27:08申猴
日期:2015-01-19 08:07:36辰龙
日期:2015-02-04 11:40:06处女座
日期:2015-02-04 11:40:412015年亚洲杯之卡塔尔
日期:2015-03-06 12:01:322015年亚洲杯之乌兹别克斯坦
日期:2015-03-31 13:43:57
5 [报告]
发表于 2014-12-25 17:13 |只看该作者
"第6到13个字母只能是A或者T,第19到26个字母也只能是A或者T的行" 这个描述有符合的?

论坛徽章:
4
狮子座
日期:2014-04-17 10:45:47双鱼座
日期:2014-08-21 17:16:41处女座
日期:2014-08-26 13:46:46水瓶座
日期:2014-10-28 14:08:50
6 [报告]
发表于 2014-12-25 17:28 |只看该作者
  1. awk '{if((substr($0,6,8)~"^[AT]*$")&&(substr($0,19,8)~"^[AT]*$"))print}' i.txt
复制代码

论坛徽章:
60
20周年集字徽章-20	
日期:2020-10-28 14:04:3015-16赛季CBA联赛之北京
日期:2016-07-06 15:42:0715-16赛季CBA联赛之同曦
日期:2016-06-12 10:38:0915-16赛季CBA联赛之佛山
日期:2016-05-27 11:54:56黄金圣斗士
日期:2015-12-02 11:44:35白银圣斗士
日期:2015-11-25 14:32:43白银圣斗士
日期:2015-11-23 12:53:352015亚冠之布里斯班狮吼
日期:2015-10-21 16:55:482015亚冠之首尔
日期:2015-09-01 16:46:052015亚冠之德黑兰石油
日期:2015-08-31 11:39:192015亚冠之萨济拖拉机
日期:2015-08-28 21:06:5315-16赛季CBA联赛之广东
日期:2016-07-12 14:58:53
7 [报告]
发表于 2014-12-25 17:45 |只看该作者
回复 4# zxy877298415


  , V587 , 学习了
  1. awk -v s="AT" 'BEGIN{split(s,k,"");for(i in k)v[k[i]]}function c(b,e){for(i=b;i<=e;i++)if(!(a[i] in v))return 1}NR%2{h=$0;next}{split($0,a,"");if(c(6,13)||c(19,26))next;print h}' file
复制代码

论坛徽章:
10
天蝎座
日期:2013-09-22 22:32:23程序设计版块每日发帖之星
日期:2016-08-07 06:20:00lufei
日期:2016-06-17 17:38:40程序设计版块每日发帖之星
日期:2016-06-12 06:20:002016科比退役纪念章
日期:2016-05-31 15:47:20CU十四周年纪念徽章
日期:2016-05-27 12:24:562015年亚洲杯之阿曼
日期:2015-05-03 21:01:352015年辞旧岁徽章
日期:2015-03-03 16:54:15天蝎座
日期:2013-10-20 21:05:24程序设计版块每日发帖之星
日期:2016-08-11 06:20:00
8 [报告]
发表于 2014-12-25 17:46 |只看该作者
本帖最后由 liion631818 于 2014-12-25 17:47 编辑
  1. sed -nr '$!N;/\n.{8}[AT]{8}.{2}[AT]{8}/p'
复制代码

论坛徽章:
60
20周年集字徽章-20	
日期:2020-10-28 14:04:3015-16赛季CBA联赛之北京
日期:2016-07-06 15:42:0715-16赛季CBA联赛之同曦
日期:2016-06-12 10:38:0915-16赛季CBA联赛之佛山
日期:2016-05-27 11:54:56黄金圣斗士
日期:2015-12-02 11:44:35白银圣斗士
日期:2015-11-25 14:32:43白银圣斗士
日期:2015-11-23 12:53:352015亚冠之布里斯班狮吼
日期:2015-10-21 16:55:482015亚冠之首尔
日期:2015-09-01 16:46:052015亚冠之德黑兰石油
日期:2015-08-31 11:39:192015亚冠之萨济拖拉机
日期:2015-08-28 21:06:5315-16赛季CBA联赛之广东
日期:2016-07-12 14:58:53
9 [报告]
发表于 2014-12-25 17:47 |只看该作者
回复 6# 圣西罗门柱


    题意应该是这个:
  1. awk 'NR%2{h=$0;next}{if((substr($0,6,8)~"^[AT]*$")&&(substr($0,19,8)~"^[AT]*$"))print h}' file
复制代码

论坛徽章:
6
羊年新春福章
日期:2015-03-03 17:16:28双子座
日期:2015-03-03 17:16:56巳蛇
日期:2015-03-03 17:17:2415-16赛季CBA联赛之福建
日期:2016-03-11 09:05:00黑曼巴
日期:2016-07-07 16:58:1215-16赛季CBA联赛之吉林
日期:2016-11-14 09:23:07
10 [报告]
发表于 2014-12-25 17:56 |只看该作者
  1. #!/usr/bin/env python

  2. import re

  3. file = open('test','r')
  4. list = [i.strip() for i in file.readlines()]
  5. pp1 = re.compile("^[AT]{8}")

  6. for i in list[1::2]:
  7.     if re.findall(pp1,i[5:13]) and re.findall(pp1,i[18:26]):
  8.         num = list.index(i) - 1
  9.         print list[num]
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP