Linux 水平组合多个文本文件

Linux 水平组合多个文本文件,linux,perl,Linux,Perl,一个目录中有多个以制表符分隔的文本文件,文件名中包含相同的字符串:“cnv_data.txt”。我想水平组合这些文件。这是Perl脚本的一部分。每个文件中的行数和列数相同(11列和52行)。以下是所需输出的示例: File0ne_cnv_data.txt SampleID: sample1 CHROM POS FUNC1.gene chr1 11174372 MTOR Filetwo_cnv_data.txt SampleID: sample2 CHROM

一个目录中有多个以制表符分隔的文本文件,文件名中包含相同的字符串:“cnv_data.txt”。我想水平组合这些文件。这是Perl脚本的一部分。每个文件中的行数和列数相同(11列和52行)。以下是所需输出的示例:

File0ne_cnv_data.txt
 SampleID: sample1
CHROM   POS        FUNC1.gene
chr1    11174372    MTOR


Filetwo_cnv_data.txt
 SampleID: sample2
CHROM   POS        FUNC1.gene
Chr2    1608066     MYCN



Combined_cnv_data.txt                       
SampleID: sample1                   SampleID: sample2       
CHROM   POS       FUNC1.gene        CHROM   POS       FUNC1.gene
chr1    11174372    MTOR            chr1    65310459    JAK1
我试过:

my $cmd23 = `paste *final_cnv_data.txt >> $combined_CNV`; print $cmd23;
而且:

my $cmd23 = `cat *final_cnv_data.txt >> $combined_CNV`; print $cmd23;
但最终文件是空白的

有没有其他方法来完成我所寻找的

谢谢

检查粘贴命令

paste --help
paste $file1 file2 > $file3
或者,如果您想将所有文件与sufix组合,您可以这样做

paste SUFIX* >> my_new_file.txt
编辑

PD:如果要打印,请不要重定向到文件

选中粘贴命令

paste --help
paste $file1 file2 > $file3
或者,如果您想将所有文件与sufix组合,您可以这样做

paste SUFIX* >> my_new_file.txt
编辑

PD:如果要打印,请不要重定向到文件,请尝试以下操作

my @ar = <*.txt>; #This is called glob
my %hash;
foreach my $files(@ar)
{
    open my $fh, "<", $files or die "Error opening $!";;
    while (<$fh>)
    {
        chomp;
        $hash{"$."} .= "$_\t";

    }
}
foreach (sort{$a<=>$b}keys %hash)
{
    print "$hash{$_}\n";
}
my@ar=#这叫做glob
我的%hash;
foreach my$文件(@ar)
{
打开我的$fh,“尝试以下操作

my @ar = <*.txt>; #This is called glob
my %hash;
foreach my $files(@ar)
{
    open my $fh, "<", $files or die "Error opening $!";;
    while (<$fh>)
    {
        chomp;
        $hash{"$."} .= "$_\t";

    }
}
foreach (sort{$a<=>$b}keys %hash)
{
    print "$hash{$_}\n";
}
my@ar=;#这叫做glob
我的%hash;
foreach my$文件(@ar)
{

打开my$fh,“您希望
print$cmd23
行怎么说?粘贴工作,但每个文件都包含一个示例id(第一行,第一列)。当我合并这些文件时,样本ID会显示在一起,即使文件包含多个列。在您的样本输出中,第二列的数据与第二列的数据根本不匹配,即,
1608066
!=
65310459
。您能澄清或更正您的样本吗?祝您好运。您的体验是什么单击打印$cmd23的
print
行,表示粘贴工作,但每个文件都包含一个示例id(第一行,第一列)。当我合并这些文件时,样本ID将显示在彼此的旁边,即使文件包含多个列。在您的样本输出中,第二列的数据与第二列的数据根本不匹配,即,
1608066
!=
65310459
。您能澄清或更正您的样本吗?祝您好运。第二行:好的,就像问题已经说的一样。是的,只是手册页上的例子,只是用perl的代码片段编辑。我想这是他/她需要的,并且在你放的地方很重要*:染料,这对两个文件有效,但是当我不知道可能有多少文件时该怎么办。我所知道的是这些文件将包含*cnv_data.txt.Ok然后是JUt do
my$cmd23=
paste/tmp/temp/*cnv_data.txt
它可以与多个文件一起工作。OK,它工作正常,但它粘贴了样本Id(每个文件的第一列)第1行,第1列是sample_id 1,第1行,第2列是sample_id 2,但是每个文件都有多个列。有什么建议吗?谢谢第二行看起来和问题已经说的一模一样。是的,这只是手册页中的一个例子,只是用perl代码段编辑的。我认为这是他/她需要的,在哪里很重要你把*:染料,这对两个文件有效,但当我不知道可能有多少文件时该怎么办。我知道这些文件将包含*cnv_data.txt.Ok,然后只需执行
my$cmd23=
paste/tmp/temp/*cnv_data.txt
它可以处理多个文件。好的,但它粘贴了样本Id(每个文件的第一列)第1行,第1列是示例id 1,第1行,第2列是示例id 2,但是每个文件都有多个列。有什么建议吗?谢谢