我有一个包含这样的行的文件:
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;
}
拜托,我需要你的帮助!
答案 0 :(得分: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;
}
答案 1 :(得分: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;