免费注册 查看新帖 |

Chinaunix

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

[文本处理] 如何对两个文件进行筛选 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2017-10-14 18:23 |只看该作者 |倒序浏览
处理文件时,遇到下面的问题,请教大神解决:
1.txt
chr7                 121057199
chr7                 162375770
chr12         19525191
chr12         20519954




2.txt
chr7    127231353       127231759       +       ENST00000000233 ENSG00000004059 mRNA    utr3_0
chr7    127228399       127228553       +       ENST00000000233 ENSG00000004059 mRNA    utr5_0
chr12   9098014          9098180           -       ENST00000000412 ENSG00000003056 mRNA    cds_4
chr12   9098825          9099000           -       ENST00000000412 ENSG00000003056 mRNA    cds_5



需要的结果是判断第一列相同,1.txt文件的第二列的数值在2.txt的2,3列之间,然后输出的结果类似

chr7    127231353       127231759       +       121057199       ENSG00000004059

感谢啊

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
2 [报告]
发表于 2017-10-14 20:37 |只看该作者
需要的结果是判断第一列相同,1.txt文件的第二列的数值在2.txt的2,3列之间
这句话怎样理解?

论坛徽章:
0
3 [报告]
发表于 2017-10-15 20:35 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
24
申猴
日期:2014-10-10 15:56:39射手座
日期:2014-10-10 15:57:18黑曼巴
日期:2018-05-14 11:05:122016科比退役纪念章
日期:2018-05-14 11:05:0715-16赛季CBA联赛之北控
日期:2018-05-14 11:05:0015-16赛季CBA联赛之江苏
日期:2017-02-27 18:11:0715-16赛季CBA联赛之上海
日期:2018-08-15 09:48:5415-16赛季CBA联赛之佛山
日期:2018-07-20 17:14:2315-16赛季CBA联赛之佛山
日期:2019-09-10 18:08:4615-16赛季CBA联赛之山西
日期:2020-03-26 09:40:5115-16赛季CBA联赛之佛山
日期:2020-05-08 09:03:54
4 [报告]
发表于 2017-10-16 09:52 |只看该作者
  1. [root@iZuf62sazcxqandkv55wyjZ tmp]# cat 1.txt
  2. chr7                 127231354
  3. chr7                 162375770
  4. chr12         19525191
  5. chr12         20519954
  6. [root@iZuf62sazcxqandkv55wyjZ tmp]# cat 2.txt
  7. chr7    127231353       127231759       +       ENST00000000233 ENSG00000004059 mRNA    utr3_0
  8. chr7    127228399       127228553       +       ENST00000000233 ENSG00000004059 mRNA    utr5_0
  9. chr12   9098014          9098180           -       ENST00000000412 ENSG00000003056 mRNA    cds_4
  10. chr12   9098825          9099000           -       ENST00000000412 ENSG00000003056 mRNA    cds_5
  11. [root@iZuf62sazcxqandkv55wyjZ tmp]# awk 'NR==FNR{a[FNR,$1]=$2}a[FNR,$1]&&a[FNR,$1]>=$2&&a[FNR,$1]<=$3{print $1,$2,$3,$4,a[FNR,$1],$6}' 1.txt 2.txt
  12. chr7 127231353 127231759 + 127231354 ENSG00000004059
复制代码

修改了1.txt第二列测试输出

论坛徽章:
0
5 [报告]
发表于 2017-10-16 10:16 |只看该作者
本帖最后由 gobuhei 于 2017-10-16 10:18 编辑

awk  'NR==FNR{a[FNR$1]=$2;next}a[FNR$1]>=$2 && a[FNR$1]<=$3{print $1,$2,$3,$4,a[FNR$1],$6}' file1.txt file2.txt

论坛徽章:
2
2016科比退役纪念章
日期:2017-09-30 10:47:3315-16赛季CBA联赛之福建
日期:2017-10-13 09:46:21
6 [报告]
发表于 2017-10-16 11:19 |只看该作者
回复 1# 蓝色未央
要不要考虑两个文件第一列数目不对应的情况呢?  例如:

1.txt
chr7                 121057199
chr7                 162375770
chr7                 127228400
chr12         19525191
chr12         20519954


2.txt
chr7    127231353       127231759       +       ENST00000000233 ENSG00000004059 mRNA    utr3_0
chr7    127228399       127228553       +       ENST00000000233 ENSG00000004059 mRNA    utr5_0
chr12   9098014          9098180           -       ENST00000000412 ENSG00000003056 mRNA    cds_4
chr12   9098825          9099000           -       ENST00000000412 ENSG00000003056 mRNA    cds_5




论坛徽章:
25
程序设计版块每日发帖之星
日期:2016-05-03 06:20:0015-16赛季CBA联赛之八一
日期:2018-07-05 10:34:09黑曼巴
日期:2018-07-06 15:19:5015-16赛季CBA联赛之佛山
日期:2018-08-03 13:19:3315-16赛季CBA联赛之山西
日期:2018-08-07 19:46:2315-16赛季CBA联赛之广夏
日期:2018-08-08 19:31:5015-16赛季CBA联赛之青岛
日期:2018-11-26 15:21:5015-16赛季CBA联赛之上海
日期:2018-12-11 09:45:3219周年集字徽章-年
日期:2020-04-18 23:54:5215-16赛季CBA联赛之深圳
日期:2020-04-19 21:40:19黑曼巴
日期:2022-04-03 17:55:1315-16赛季CBA联赛之八一
日期:2018-07-03 16:56:46
7 [报告]
发表于 2017-10-16 16:33 |只看该作者
回复 1# 蓝色未央


为了直观,修改一下示例中的数字。
cat 1
chr7          3
chr7          6
chr12         7
chr12         8

cat 2
chr7  1  5  +  ENST00000000233  ENSG00000004059  mRNA  utr3_0
chr7  1  5  +  ENST00000000233  ENSG00000004059  mRNA  utr5_0
chr12  1  5  -  ENST00000000412  ENSG00000003056  mRNA  cds_4
chr12  1  5  -  ENST00000000412  ENSG00000003056  mRNA  cds_5

  1. awk 'FILENAME==ARGV[1]{a[NR,$1]=$2;next}{if(a[FNR,$1]&&a[FNR,$1]>$2&&a[FNR,$1]<$3){print $1,$2,$3,$4,a[FNR,$1],$6}}' 1 2
复制代码

输出:
chr7 1 5 + 3 ENSG00000004059
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP