gpt4 book ai didi

linux - 水平组合多个文本文件

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:06:54 27 4
gpt4 key购买 nike

在一个目录中有多个制表符分隔的文本文件,文件名中包含相同的字符串:“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;

但是最后的文件是空白的。

还有其他方法可以实现我的要求吗?

谢谢

最佳答案

尝试如下。

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 中 $. 特殊变量给出文​​件中的当前行号。只需创建哈希,键是行号,值是行的数据。

.= 这意味着串联。因此,只需将下一个文件值附加到同一行位置即可。

关于linux - 水平组合多个文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38508416/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com