2016-11-03 22 views
0

我有这个perl脚本(下面)将每个文件中的行数拆分为1个数据文件。我正在尝试修改此脚本,将第一个文件(标题行)的第一行写入每个拆分文件的顶部。做这个的最好方式是什么?Perl脚本按行数拆分文件..将标题行添加到每个文件的顶部

use strict; 
use warnings; 

my $source = shift or &usage(); 
my $lines_per_file = shift or &usage(); 
my $filename = shift or &usage(); 
my $target = shift or &usage(); 
my $filenum = 2; 

my $dir = "${target}"; 
chdir($dir) or die "Failed to cd to $dir: $!"; 

$filename =~ s{\.[^.]+$}{}; 

open (my $FH, "<$source") or die "Could not open source file. $!"; 
open (my $OUT, ">${filename}_1.csv") or die "Could not open destination file. $!"; 
print "Writing file: ${filename}_1.csv\n"; 
my $i = 0; 

while (<$FH>) { 
    print $OUT $_; 
    $i++; 
    if ($i % $lines_per_file == 0) { 
     close($OUT); 
     my $FHNEW = ($filenum); 
     open ($OUT, ">${filename}_${FHNEW}.csv") or die "Could not open destination file. $!"; 
      print "Writing file: ${filename}_${filenum}.csv\n"; 
      $filenum++; 
    } 
} 

sub usage() { 
print <<EOF; 

    PROGRAM NAME: Split .csv file 

    DESCRIPTION: 
    Takes a file and creates many small files out of the large file. 

    EXAMPLE USAGE: splitfile.pl filename.csv 300000 filename /dir/ 

     PARAMETERS: 
     1. Source File: File name of the source file to partition. 
     2. Maximum number of lines per file: The number of lines per file. 
     3. Filename without the extension 
     4. Target location of split files ending with/

EOF 
exit; 
} 
+2

你明白你的代码在干什么吗?你自己写了吗? – simbabque

+1

_best way_将_remember_(即_store_)第一个文件在全局变量的第一行(在'while'之外),并打印存储的行,只要你打开一个新文件。 – PerlDuck

回答

0
@content = <$FH>; 
print $content[0]; 

顺便说一句,有很多不同的方式来做到这一点。您也可以使用命令进行打印。如

foreach my $file(glob "$dir.*") 
{ 
    print `head -n 1 $file`; 
} 
+1

你回答什么问题? – Toto

+0

我明显回答了这个问题---获得罚款的第一行。 –

+0

但这不是问的问题。 OP希望将一个文件的第一行打印到每个分割的文件中 – Toto

相关问题