Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 比较两个选项卡分隔的文件_Python_Perl_Bash_Bioinformatics - Fatal编程技术网

Python 比较两个选项卡分隔的文件

Python 比较两个选项卡分隔的文件,python,perl,bash,bioinformatics,Python,Perl,Bash,Bioinformatics,这是一个与生物信息学相关的问题,但仍然是一个非常重要的编程问题。对于下面给出的问题,我没有在bash中构建一些行程序,并考虑在这里提问。请帮忙 问题:我有两个文件(标签分开)。文件A看起来像 chr1 17050255 234916798 chr1 36688211 36840408 chr1 153961765 154156955 chr1 154128722 154194653 chr1 154130378 154156872 chr1

这是一个与生物信息学相关的问题,但仍然是一个非常重要的编程问题。对于下面给出的问题,我没有在bash中构建一些行程序,并考虑在这里提问。请帮忙

问题:我有两个文件(标签分开)。文件A看起来像

chr1    17050255    234916798
chr1    36688211    36840408
chr1    153961765   154156955
chr1    154128722   154194653
chr1    154130378   154156872
chr1    207493679   207819735
这是一个基因组坐标列表

文件B的前3列中还包含基因组坐标,第4列中有一个名称

chr1    1709155 1709324 MMM3
chr1    1709155 1709324 Sk-20
chr1    1709608 1709727 ZdaA
chr1    1709608 1709727 ZdaA
chr1    1709608 1709727 ZA
chr1    1709629 1709727 E-1
chr1    1709629 1709727 E-1
chr1    1709629 1709727 E-1
我想让文件B的区域(以及第四列)与文件A重叠,并像这样打印它

ChrA   StrtA    stpA    ChrB  SrtB  StpB       Name 
首先是文件A中的区域,然后是文件B中与其重叠的区域以及文件B中第四列的值


谢谢你

我绝对推荐你看看这样做。将两者加载到单独的数据帧中,然后您应该能够以您希望看到的格式将它们合并在一起。

我绝对建议您查看以执行类似操作。将两者加载到单独的数据帧中,然后您应该能够以您希望看到的格式将它们合并在一起。

使用bedtools


(你也可以问)使用床上工具:

(你也可以问)

你可以用SQL的方式处理你的问题:

#!/usr/bin/env perl
use strict;
use utf8;
use warnings 'all';

use Data::Printer;
use DBI;

my $dbh = DBI->connect('dbi:CSV:', undef, undef, {
    f_encoding      => 'utf8',
    csv_quote_char  => undef,
    csv_escape_char => undef,
    csv_sep_char    => "\t",
    csv_eol         => "\n",
    csv_quote_space => 0,
    csv_quote_null  => 0,
    csv_tables      => {
        fileA       => { file => 'fileA.tsv' },
        fileB       => { file => 'fileB.tsv' },
    },
    RaiseError      => 1,
    PrintError      => 1,
}) or die "DBI/DBD::CSV error: " . $DBI::errstr;

my $sth = $dbh->prepare(<<SQL_QUERY);
    SELECT *
    FROM fileA
    JOIN fileB ON
        (StrtA <= StpB) OR (StrtB <= StpA)
    WHERE Name IS NOT NULL
SQL_QUERY

$sth->execute;
while (my $row = $sth->fetchrow_arrayref) {
    p $row;
}
$sth->finish;
$dbh->disconnect;
#/usr/bin/env perl
严格使用;
使用utf8;
使用“全部”警告;
使用数据打印机;
使用DBI;
my$dbh=DBI->connect('DBI:CSV:',未定义,未定义{
f_编码=>'utf8',
csv_quote_char=>未定义,
csv_escape_char=>未定义,
csv\u sep\u char=>“\t”,
csv\u eol=>“\n”,
csv_quote_space=>0,
csv_quote_null=>0,
csv_表=>{
fileA=>{file=>'fileA.tsv'},
fileB=>{file=>'fileB.tsv'},
},
RaiseError=>1,
PrintError=>1,
})或死“DBI/DBD::CSV错误:”$DBI::errstr;
我的$sth=$dbh->prepare(断开连接;
(不过,我不确定是否理解您的重叠情况)

您可以使用类似SQL的方式来处理您的问题:

#!/usr/bin/env perl
use strict;
use utf8;
use warnings 'all';

use Data::Printer;
use DBI;

my $dbh = DBI->connect('dbi:CSV:', undef, undef, {
    f_encoding      => 'utf8',
    csv_quote_char  => undef,
    csv_escape_char => undef,
    csv_sep_char    => "\t",
    csv_eol         => "\n",
    csv_quote_space => 0,
    csv_quote_null  => 0,
    csv_tables      => {
        fileA       => { file => 'fileA.tsv' },
        fileB       => { file => 'fileB.tsv' },
    },
    RaiseError      => 1,
    PrintError      => 1,
}) or die "DBI/DBD::CSV error: " . $DBI::errstr;

my $sth = $dbh->prepare(<<SQL_QUERY);
    SELECT *
    FROM fileA
    JOIN fileB ON
        (StrtA <= StpB) OR (StrtB <= StpA)
    WHERE Name IS NOT NULL
SQL_QUERY

$sth->execute;
while (my $row = $sth->fetchrow_arrayref) {
    p $row;
}
$sth->finish;
$dbh->disconnect;
!/usr/bin/env perl
严格使用;
使用utf8;
使用“全部”警告;
使用数据打印机;
使用DBI;
my$dbh=DBI->connect('DBI:CSV:',未定义,未定义{
f_编码=>'utf8',
csv_quote_char=>未定义,
csv_escape_char=>未定义,
csv\u sep\u char=>“\t”,
csv\u eol=>“\n”,
csv_quote_space=>0,
csv_quote_null=>0,
csv_表=>{
fileA=>{file=>'fileA.tsv'},
fileB=>{file=>'fileB.tsv'},
},
RaiseError=>1,
PrintError=>1,
})或死“DBI/DBD::CSV错误:”.$DBI::errstr;
我的$sth=$dbh->prepare(断开连接;


(我不确定我是否理解您的重叠条件)

您如何定义“重叠”?鉴于上述数据,您的预期输出是什么?对于此类问题,通常需要一个从示例输入中得到的预期输出的实际示例。“结果”的字符串不要出现在输入中,因此输出不会以清晰的方式显示您想要的内容。如果您选择Python路线,使用模块解析输入文件可能会使您的生活更轻松。您的bash脚本失败了。您是否有Perl或Python中的任何内容,或者什么都没有?显示任何代码可能有助于理解您正在尝试执行的操作史蒂夫:这些是碱基对,所以在1号染色体上,我有一个从17050255开始到234916798结束的片段。如果在文件B中也有一个片段在1号染色体上,它的起始值或结束值在17050255和234916798之间,它被定义为重叠。你如何定义“重叠”呢?根据上述数据,您的预期输出是什么?对于这类问题,通常需要一个由示例输入产生的预期输出的实际示例。“结果”的字符串不要出现在输入中,因此输出不会以清晰的方式显示您想要的内容。如果您选择Python路线,使用模块解析输入文件可能会使您的生活更轻松。您的bash脚本失败了。您是否有Perl或Python中的任何内容,或者什么都没有?显示任何代码可能有助于理解您正在尝试执行的操作史蒂夫:这些是碱基对,所以在1号染色体上,我有一个从17050255开始到234916798结束的片段。如果在文件B中也有一个片段在1号染色体上,并且它的起始值或结束值在17050255和234916798之间,它被定义为重叠。熊猫要查找重叠吗?我很瘦k你需要精确匹配,我相信这里的重叠并不意味着在这种情况下相等。@petr:不,你不必把核苷酸含量放在里面。这纯粹是数学上的。熊猫会查找重叠吗?我想你需要精确匹配,这里的重叠不意味着在这种情况下相等。@petr:不,我相信你不必把核苷酸含量放进去。这纯粹是数学问题。我不明白你的问题:看看像-wa这样的交叉床选项,使用cut来减少列数。我的评论来的太晚了!:-)我已经解决了Pierre,我用-wa和-wb选项一起得到了所需的输出。谢谢你的启发:)我不明白你的问题:看看像-wa这样的intersectBed选项,使用cut来减少列数。我的评论来了,太晚了!:-)我已经解决了这个问题,我使用-wa和-wb选项同时获得了所需的输出。谢谢你启发我:)