Linux 水平组合多个文本文件
一个目录中有多个以制表符分隔的文本文件,文件名中包含相同的字符串:“cnv_data.txt”。我想水平组合这些文件。这是Perl脚本的一部分。每个文件中的行数和列数相同(11列和52行)。以下是所需输出的示例: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
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 domy$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,但是每个文件都有多个列。有什么建议吗?谢谢