提取两个文件中的数据,并把完整格式存储到一个新的文件中 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
imlm

提取两个文件中的数据,并把完整格式存储到一个新的文件中

  •  
  •   imlm 2019 年 11 月 24 日 1342 次点击
    这是一个创建于 2343 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我有两个文件 第一个是包含 unigene 序号的文件,名称为一个序号一行

    CL79.Contig98_All

    Unigene56947_All

    CL323.Contig1_All

    另一个文件里面是 All-Unigene.fa 的文件,里面数据很大,其中第一个文件的序号以及对应的序列在 All-Unigene.fa 可以找到格式为.fa 格式,如下所示

    CL323.Contig1_All CTTTTTTCCAGGGAGGTGGCAGCAGTCTACGTGCTCGTTATGATCGTTTG GAATGACAAATATTTTGCAAATACTGTGGGTTTCTGTGGAATAACCTTGC TTGATTTTGCAGGTTAAACCAGCTGCAGCTGGTTTTGTTTAACACATTGT TCTCTTTCTGTAGATAGAAACAACCATG

    CL447.Contig1_All AGAGAAACCTGGTCAGTTGGCTGGAGGTTTCAGCCAGAGAAGGTCTTTTA TACTGTTGTATTTGAATTTTGTGCACTTAGGCTGACTCTTCCTCTGTGTG CTGTAGGATGGAGGTGTCCTGCCTGGAGCTGGCGTTGGAGGGTGAGCGGC TCTGTAAGGTGGGCGACTACAGAGCAGGCGTCTCCTTCTTTGAAGCCGCC ATCCAGGTGGGCACAGAGGACCTGCAGGTGCTAAGTGC

    我想要通过序号文件找到它在 All-Unigene.fa 文件查找到对应的序列,然后把 All-Unigene.fa 中的完整的一条输入新建的文件里面。

    实验室最近新开始搞一部分生物信息的东西,零基础开始学习,头秃,请大神帮助。

    11 条回复    2019-11-26 10:12:20 +08:00
    crella
        1
    crella  
       2019 年 11 月 25 日 via Android
    你至少要说明用什么语言啊,要不然怎么给代码?按你的描述我觉得还不太难。
    crella
        2
    crella  
       2019 年 11 月 25 日 via Android
    https://paste.ubuntu.com/p/kv5fYY9vhH/
    理想情况可以这样。要想处理好异常,又要跑得快,就得改改。
    crella
        3
    crella  
       2019 年 11 月 25 日 via Android   1
    imlm
        4
    imlm  
    OP
       2019 年 11 月 25 日
    语言,这个倒是无所谓,自己用 Perl 弄了一个,不过感觉很差,而且不知道哪里错误了,反正没有能够出来。
    #!/usr/bin/perl
    use strict;
    my %hash=();
    open list,"<$ARGV[0]";
    while (<list>){
    chomp;
    $hash{$_}=1; #先把需要的序列 id 放到哈希表中,id 是键所有值都设为 1
    }
    close list;

    open unigene,"<$ARGV[1]";
    $/=">";
    <unigene>;
    while (<unigene>){
    chomp;
    my $ID=(split /\n/,$_,2)[0]; #分割成两部分,以大于号为分割点,分成 id 和序列.
    if (exists $hash{$ID}){ #用 exists 函数判断当前 id 在哈希键是否存在,存在输出 id 与序列,否则下一步
    print ">$_\n";
    }
    else{
    next;
    }

    }
    close unigene;
    imlm
        5
    imlm  
    OP
       2019 年 11 月 25 日
    话说谢谢你们的帮助。
    crella
        6
    crella  
       2019 年 11 月 25 日 via Android
    perl 对于多行同时读入文本,反正我是搜索不到好的方法。隔壁 ruby 可以 readlines 一次性读取所有行并切割为数组,又可以 while line = fileio.gets,逐行读取。真香。perl 好多东西搜不到啊。
    imlm
        7
    imlm  
    OP
       2019 年 11 月 25 日
    @crella 不清楚为什么,你的两个脚本在同一个地方报错了...
    syntax error, unexpected '|', expecting ')'
    serials.each( |cur_serial|

    syntax error,unexpected tSTRING_DEND, expecting keyword_end
    syntax error,unexpected end-of-input, expecting keyword_end
    serial_processor()
        8
    imlm  
    OP
       2019 年 11 月 25 日
    @crella 修复之后运行,不是很明白为什么一运行直接就结束了,很快的那种,然后也没有什么文件生成或者改变...
    crella
        9
    crella  
       2019 年 11 月 25 日
    @imlm 不好意思啊,昨晚没电脑,手机码的。把 serials.each( |cur_serial| 的(改成{,即大括号。
    要不你把示例数据压缩包上传网盘,我再测试一下?
    crella
        10
    crella  
       2019 年 11 月 25 日
    额,电脑才看明白你的生物序列之间是空格还是换行……
    imlm
        11
    imlm  
    OP
       2019 年 11 月 26 日 via Android
    @crella 已经可以了,自己修改了一下,嘿嘿,谢啦。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     896 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 36ms UTC 21:41 PVG 05:41 LAX 14:41 JFK 17:41
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86