- 论坛徽章:
- 5
|
{:2_179:} 这个问题比较难, 很难搞
请确保您的 file1.txt, file2.txt 文件格式
是 unix 格式 "\n"
不是 windows 格式 "\r\n"
perl script.pl file1.txt file2.txt > new.txt- #!/usr/bin/perl
- open my $f1, $ARGV[0];
- open my $f2, $ARGV[1];
- my $title1 = <$f1>;
- my $title2 = ( split /\t/, <$f2>, 5 )[-1];
- my $col1 = ( $title1 =~ tr/\t// ) + 1 - 4;
- my $col2 = ( $title2 =~ tr/\t// ) + 1;
- my $void1 = join( "\t", (0) x $col1 );
- my $void2 = join( "\t", (0) x $col2 ) . $/;
- chomp $title1;
- print join "\t", $title1, $title2;
- my %f;
- while (<$f1>) {
- chomp;
- my @a = split /\t/, $_, 5;
- $f{ $a[0] }{ join "\t", @a[ 1 .. 3 ] } = [ @a[ 1, -1 ] ];
- }
- while (<$f2>) {
- my @a = split /\t/, $_, 5;
- my $key = join "\t", @a[ 1 .. 3 ];
- exists $f{ $a[0] }{$key}
- ? push @{ $f{ $a[0] }{$key} }, $a[-1]
- : push @{ $f{ $a[0] }{$key} }, $a[1], $void1, $a[-1];
- }
- my @chrom = map { $_->[0] } sort { $a->[1] <=> $b->[1] }
- map { [ $_, substr $_, 3 ] } keys %f;
- for my $chr (@chrom) {
- print "$chr\t$_\t$f{$chr}{$_}[1]\t", $f{$chr}{$_}[2] || $void2
- for sort { $f{$chr}{$a}[0] <=> $f{$chr}{$b}[0] }
- keys %{ $f{$chr} };
- }
复制代码 回复 14# owwa
|
|