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

0

あなたの質問を正しく理解できれば、段落モードが役に立つかもしれません。これは、1 つだけではなく、2 つ以上の改行でレコードを分割します。

@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 に答える