1

我有一个文件,其中包含这样的行:

1       107275  447049 scaffold1443     465     341154  -

有几行以 1 开头,然后以空行分隔并以 2 开头,依此类推。我想根据它们的数量将这些行分隔到不同的文件中。我写了这个脚本,但它只在每个文件中打印第一行。

#!/usr/bin/perl
#script for choosing chromosome
use strict;

my $filename= $ARGV[0];
open(FILE, $filename);
while (my $line = <FILE>) {
my @data = split('\t', $line);
my $length = @data;
#print $length;
my $num = $data[0];
if ($length ==  6) {
open(my $fh, '>', $num);
print $fh $line;
}
$num = $num + 1;
}

拜托我需要你的帮忙!

4

2 回答 2

3

用于>>打开文件以追加到它的末尾,因为>总是将所需文件截断为零字节,

use strict;

my $filename = $ARGV[0];
open(my $FILE, "<", $filename) or die $!;
while (my $line = <$FILE>) {
  my @data = split('\t', $line);
  my $length = @data;
  #print $length;
  my $num = $data[0];
  if ($length ==  6) {
    open(my $fh, '>>', $num);
    print $fh $line;
  }
  $num = $num + 1;
}
于 2013-08-14T12:41:39.270 回答
0

如果我正确理解了您的问题,那么段落模式可能会很有用。这打破了两个或多个换行符的记录,而不仅仅是一个:

@ARGV or die "Supply a filename\n";
my $filename= $ARGV[0];

local $/ = "";    # Set paragraph mode
open(my $file, $filename) or die "Unable to open '$filename' for read: $!";

while (my $lines = <$file>) {

    my $num = (split("\t", $lines))[0];

    open(my $fh, '>', $num) or die "Unable to open '$num' for write: $!";
    print $fh $lines;
    close $fh;
}

close $file;
于 2013-08-14T12:46:14.603 回答