免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: little_joe
打印 上一主题 下一主题

’求助!!!求助!!!文件匹配输出特定的内容‘ [复制链接]

论坛徽章:
0
21 [报告]
发表于 2016-06-19 17:52 |显示全部楼层
非常感谢!! 回复 41# sunzhiguolu


   

论坛徽章:
0
22 [报告]
发表于 2016-06-20 17:27 |显示全部楼层
Query  59   FSGDMLPD-GINRRWLTPAB---LRQPVVCLNRSGNMVGQSVLPMAG-LSGKKKATKNSLF  116
              G       IN R  T A S++ +P+          G+++    G    KK+  KNSL
Sbjct  61   APGWWDKPPLINARVETAATSRMFKPLW-------QHGRAICFADGWFEWKKEGDKNSLI  113

Query  59   FSGDMLPDGINRRWLTPAB-LRQPVVCLNRSGNMVGQSVLPMAG-LSGKKKATKNSLF  116
              G       IN R  T A S++ +P+          G+++    G    KK+  KNSL
Sbjct  61   APGWWDKPPLINARVETAATSRMFKPLW-------QHGRAICFADGWFEWKKEGDKNSLI  113

Query  59   FSGDMLPD-GINRRWLTPABT-LRQPVVCLNRSGNMVGQSVLPMAG-LSGKKKATKNSLF  116
              G       IN R  T A S++ +P+          G+++    G    KK+  KNSL
Sbjct  61   APGWWDKPPLINARVETAATSRMFKPLW-------QHGRAICFADGWFEWKKEGDKNSLI  113
如果文件A数值为78则对应的Query行和Sbjct行应该是红色的字母,您的想法是正确的,谢谢您的热情帮助及指教,谢谢您!回复 44# sunzhiguolu


   

论坛徽章:
0
23 [报告]
发表于 2016-06-21 09:53 |显示全部楼层
stop_pipei_hb-1.word (1.32 MB, 下载次数: 1) 麻烦还需要请教您一个问题,这个文件作为文件A跑不出结果是因为重复项太多吗?回复 43# sunzhiguolu


   

论坛徽章:
0
24 [报告]
发表于 2016-06-21 10:28 |显示全部楼层
谢谢关注!回复 47# 251744647


   

论坛徽章:
0
25 [报告]
发表于 2016-09-05 17:52 |显示全部楼层
不好意思,又来麻烦您,您之前帮忙写的脚本非常好用,受益匪浅,我想在问您一下,要是在这两个文件事例中加一点文件限制条件,其它的匹配模式都不变,这样是不是直接加一些条件语句就好了?
例如:在id匹配上之后,读取文件b时对Identities = 49/56 (88%)即序列相似性大于90%才进行序列匹配输出,否则直接跳出忽略,
这样您写的程序我尝试修改了一下,结果功夫不到家,只好又来请教,
这是您上次写的,麻烦您在帮忙给看看
O(∩_∩)O谢谢
#!/usr/bin/perl
use strict;
use warnings;


sub collect_data{
    my (%ha, %hFilt, $id);
    open (my $fhA, '<', shift);
    while (defined (local $_ = <$fhA>){
        if (/\A([a-z]\S+)/i){
            %hFilt = () if (!exists $ha{$1});
            $id = $1;
            next;
        }
        push (@{$ha{$id}}, $1) if (/\A\s*(\d+)/ and !$hFilt{$1}++);
    }
    close ($fhA);
    \%ha;
}


sub compare{
    my ($id, $rh, @aData) = (@_);
    my %hStat;
    foreach my $v (@{$rh->{$id}}){
        foreach my $V (grep {$v >= $_->[0] && $v <= $_->[2]} @aData){
            my ($cnt, $leng) = (0, $v - $V->[0] + 1);
            if ((local $_ = substr ($V->[1], 0, $leng)) =~ /-/){
                $cnt = s/-//g;
                $cnt += length ($1) if (substr ($V->[1], $leng - 2, 1) eq '-' and substr ($V->[1], $leng) =~ /\A(-+)/);
            }
            my @aChars = split (//, $V->[4]);
            next if ($aChars[$v - $V->[0] + $cnt] eq '-');
            $hStat{$aChars[$v - $V->[0] + $cnt]}++;
        }
    }
    if (%hStat){
        print "$id\t";
        print "$_hStat{$_}\t" for keys %hStat;
        print "\n";
    }
}


my $rha = collect_data (shift);


open (my $fh, '<', shift);
my ($Flag, $Offset, $ID, @aData) = 0;
while (defined (local $_ = <$fh>){
    next if (/\A\s*\z/ or !/\A(?uery|Sbjct)/);
    if (/\AQuery=\h+(\S+)/){
        compare ($ID, $rha, splice (@aData)) if (@aData);
        exists ($rha->{$1}) ? do {($ID, $Flag, $Offset) = ($1, 1, -1)} : ($Flag = 0);
        next;
    }
    next if (!$Flag);
    if (/\A(Query|Sbjct)\h+(\d+)\h+(\H+)\h+(\d+)/){
        push (@{$aData[$1 eq "Query" ? ++$Offset : $Offset]}, $2, $3, $4);
    }
}
close ($fh);
compare ($ID, $rha, splice (@aData)) if ($Flag);

文件A:
WP_000636925.1-1
        62
        63
        62
        63
        62
        63
        62
        63
        62
        63
        62
        63
        62
        63
        62
        63
        62
        63
        62
WP_000567766.1-1
        77
        77
        77
        77
        77
        77
        77
        77
        77
        77
        77
        77
        77
        77
        77
        77
        77
        77
        77
        77
        79
        79
        79
        80
        80
        80
        80
        80
        80
WP_000636925.1-1
        62
        63
        62
        63
        62
        63
        62
        63
        62
        63
        62
        63
        62
        63
        62
        63
        62
        63
        62
WP_001341795.1-1
        24
        24
        24
        24
        24
文件B:
BLASTP 2.2.29+


Reference: Stephen F. Altschul, Thomas L. Madden, Alejandro A.
Schaffer, Jinghui Zhang, Zheng Zhang, Webb Miller, and David J.
Lipman (1997), "Gapped BLAST and PSI-BLAST: a new generation of
protein database search programs", Nucleic Acids Res. 25:3389-3402.


Reference for composition-based statistics: Alejandro A. Schaffer,
L. Aravind, Thomas L. Madden, Sergei Shavirin, John L. Spouge, Yuri
I. Wolf, Eugene V. Koonin, and Stephen F. Altschul (2001),
"Improving the accuracy of PSI-BLAST protein database searches with

Query= WP_001386572.1-1

Length=21


***** No hits found *****



Lambda      K        H        a         alpha
   0.314    0.134    0.424    0.792     4.96

Gapped
Lambda      K        H        a         alpha    sigma
   0.267   0.0410    0.140     1.90     42.6     43.6

Effective search space used: 1206911076


Query= WP_000636925.1-1

Length=105
                                                                      Score     E
Sequences producing significant alignments:                          (Bits)  Value

lcl|CU928161.2_prot_CAR03545.1_2173  [gene=ECS88_2260] [protein=c...    104   2e-29


>lcl|CU928161.2_prot_CAR03545.1_2173 [gene=ECS88_2260] [protein=conserved hypothetical protein] [protein_id=CAR03545.1]
[location=2240570..2240740]
Length=56

Score =   104 bits (260),  Expect = 2e-29, Method: Compositional matrix adjust.
Identities = 49/56 (88%), Positives = 52/56 (93%), Gaps = 0/56 (0%)

Query  8   LLFTIMRSLYLKIRFPSDLRSINALNYLQVPSIDWSDSGYVQHFINVIEKMLTRKK  63
           +LFTIMRSLYLK RFPSDL+SINALNYLQVPSIDWSDSGY+QHFINVIEKM T  K
Sbjct  1   MLFTIMRSLYLKSRFPSDLKSINALNYLQVPSIDWSDSGYIQHFINVIEKMPTTNK  56



Lambda      K        H        a         alpha
   0.325    0.135    0.407    0.792     4.96

Gapped
Lambda      K        H        a         alpha    sigma
   0.267   0.0410    0.140     1.90     42.6     43.6

Effective search space used: 1406358592
Query= WP_000636925.1-1

Length=105
                                                                      Score     E
Sequences producing significant alignments:                          (Bits)  Value

lcl|CU928161.2_prot_CAR03545.1_2173  [gene=ECS88_2260] [protein=c...    104   2e-29


>lcl|CU928161.2_prot_CAR03545.1_2173 [gene=ECS88_2260] [protein=conserved hypothetical protein] [protein_id=CAR03545.1]
[location=2240570..2240740]
Length=56

Score =   104 bits (260),  Expect = 2e-29, Method: Compositional matrix adjust.
Identities = 49/56 (88%), Positives = 52/56 (93%), Gaps = 0/56 (0%)

Query  8   LLFTIMRSLYLKIRFPSDLRSINALNYLQVPSIDWSDSGYVQHFINVIEKMLTRKK  63
           +LFTIMRSLYLK RFPSDL+SINALNYLQVPSIDWSDSGY+QHFINVIEKM T  K
Sbjct  1   MLFTIMRSLYLKSRFPSDLKSINALNYLQVPSIDWSDSGYIQHFINVIEKMPTTNK  56



Lambda      K        H        a         alpha
   0.325    0.135    0.407    0.792     4.96

Gapped
Lambda      K        H        a         alpha    sigma
   0.267   0.0410    0.140     1.90     42.6     43.6

Effective search space used: 1406358592
回复 43# sunzhiguolu




论坛徽章:
0
26 [报告]
发表于 2016-09-07 15:39 |显示全部楼层
文件a和文件b的匹配方式不变,只是之前当文件a与文件b匹配成功后,直接读取序列输出想要的结果,现在这些条件都不变,只需要在匹配成功后对文件b中的Identities = 49/56 (88%)进行筛选,这里是88%
而设置的筛选条件是90%,也就是只有Identities = 49/56 (88%)后面括号的数值大于90%才进行下一步序列读取匹配
黄色的您标出来的数字的结果就是后面括号的数值,它代表两条序列的相似性,49/56就是说总共序列是56个字母,完全一样的是49个,
这样两条序列的相似性就为88%,
谢谢您的回复~~~
回复 54# sunzhiguolu



论坛徽章:
0
27 [报告]
发表于 2016-09-07 23:01 |显示全部楼层
>lcl|CU928161.2_prot_CAR03545.1_2173 [gene=ECS88_2260] [protein=conserved hypothetical protein] [protein_id=CAR03545.1]
[location=2240570..2240740]
Length=56

Score =   104 bits (260),  Expect = 2e-29, Method: Compositional matrix adjust.
Identities = 49/56 (88%), Positives = 52/56 (93%), Gaps = 0/56 (0%)

Query  8   LLFTIMRSLYLKIRFPSDLRSINALNYLQVPSIDWSDSGYVQHFINVIEKMLTRKK  63
           +LFTIMRSLYLK RFPSDL+SINALNYLQVPSIDWSDSGY+QHFINVIEKM T  K
Sbjct  1   MLFTIMRSLYLKSRFPSDLKSINALNYLQVPSIDWSDSGYIQHFINVIEKMPTTNK  56

49就是两条序列比较得出的完全相同的部分,总共是49个字母,它们每个相互对应,如上面用酸橙色标出的部分中的字母总共就是49个,它们与Query和Sbjct 的序列相对应这里由于格式问题没对太清楚,您可以看看文件。例如
Query  122  PGAAALNGDYIWDMILIPVSSLILS  146
                  PGAAALNGDYIWDMILIPVSSLILS
Sbjct   122  PGAAALNGDYIWDMILIPVSSLILS  146
这个序列的Identities = 25/25 (100%),25就是它们在BLAST(生物学中常用的软件,用于分析基因序列的相似性)的过程中匹配到的序列长度。回复 56# sunzhiguolu

论坛徽章:
0
28 [报告]
发表于 2016-09-08 23:07 |显示全部楼层
是我没说清楚地原因,两条序列就是Query和Sbjct两条互相对比的序列,Query  122  PGAAALNGDYIWDMILIPVSSLILS  146
                  PGAAALNGDYIWDMILIPVSSLILS
Sbjct   122  PGAAALNGDYIWDMILIPVSSLILS  146
例如这个序列的Identities = 25/25 (100%)
而上面的红色字母就是Query和Sbjct匹配上的相似序列
也就是说经过比对Query和Sbjct总共匹配到25个氨基酸(就是字母)
而且这25个氨基酸完全一样则Identities = 25/25 (100%)
这条序列Identities = 49/56 (88%)
Query  8   LLFTIMRSLYLKIRFPSDLRSINALNYLQVPSIDWSDSGYVQHFINVIEKMLTRKK  63
               +LFTIMRSLYLK RFPSDL+SINALNYLQVPSIDWSDSGY+QHFINVIEKM T  K
Sbjct  1   MLFTIMRSLYLKSRFPSDLKSINALNYLQVPSIDWSDSGYIQHFINVIEKMPTTNK  56
是因为总共匹配到56个氨基酸,但是其中有7个是(+和空格),
+代表两条序列的氨基酸虽然不同但是两个氨基酸性质相近,空格是为了让更多的氨基酸匹配上而插入的,
这些都是生物分析软件BLAST按照一定生物信息学原则自动进行的回复 58# sunzhiguolu


论坛徽章:
0
29 [报告]
发表于 2016-09-10 13:24 |显示全部楼层
再次表示感谢,谢谢您的帮助回复 60# sunzhiguolu


论坛徽章:
0
30 [报告]
发表于 2017-02-09 10:53 |显示全部楼层
回复 60# sunzhiguolu 您好,最近在使用楼上(60楼)添加了判断功能的程序时发现它与43楼的程序运行产生相同的结果,
于是,我就利用小数据文件跑了两个脚本,
实验数据.zip (238.23 KB, 下载次数: 1) 用stop_hbad1.txt去匹配文件blast_out01.txt发现结果相同[fly]是因为所有的结果都符合判断条件[/fly]
为了验证判断条件起作用了,我就将文件[/fly]blast_out01.txt中NP_415088.1-1中可以匹配输出的16732和16749行的Identities改成了85% 修改了Identities数据文件.zip (238.23 KB, 下载次数: 0)
结果发现两个脚本的效果仍然一样,

因此想问您一下,是程序的判断没有起作用吗?
过去了这么久还来麻烦您真是不还意思,您有时间帮忙看看,谢谢您O(∩_∩)O谢谢

修改了Identities数据文件.zip

238.22 KB, 下载次数: 0

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP