一个目录中有多个制表符分隔的文本文件,文件名中包含相同的字符串:“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;
但最终文件是空白的。
还有另一种方法可以实现我所寻找的目标吗?
由于
答案 0 :(得分:3)
请尝试以下操作。
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";
}
使用glob将所有.txt
文件存储在数组中。
然后,在perl $.
特殊变量中给出文件中的当前行号。
只需创建哈希,键是行号,值是行的数据。
.=
这意味着串联。因此,只需将下一个文件值附加到相同的行位置。
答案 1 :(得分:0)
检查粘贴命令
paste --help
paste $file1 file2 > $file3
或者,如果您想将所有文件与sufix组合,您可以
paste SUFIX* >> my_new_file.txt
修改
#!/usr/bin/perl
my $cmd23 = `paste /tmp/temp/fichero*`;
print $cmd23;
PD:如果要打印,请不要重定向到文件