【问题标题】:Perl Script to split file by number of rows .. add header row to top of each filePerl脚本按行数分割文件..在每个文件的顶部添加标题行
【发布时间】:2017-03-17 14:56:59
【问题描述】:

我有这个 perl 脚本(如下),它根据每个文件中的行数将 1 个数据文件分成多个。我正在尝试调整此脚本以将第一个文件的第一行(标题行)写入每个拆分文件的顶部。最好的方法是什么?

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;
}

【问题讨论】:

  • 你了解你的代码在做什么吗?你自己写的吗?
  • 最好的方法remember(即store)全局中第一个文件的第一行变量(在while 之外)并在您打开新文件时打印该存储的行。

标签: perl file


【解决方案1】:
@content = <$FH>;
print $content[0];

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

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

【讨论】:

  • 你在回答什么问题?
  • 我显然是在回答这个问题——得到第一行的罚款。
  • 但这不是问题所在。 OP希望将一个文件的第一行打印到每个拆分的文件中
  • print head -n 1 $file 表示打印文件的第一行,得到第一行输出后,很容易打印到其他文件中,而无需从行号中获取行。不认为这是一个很好的解决方案?或者您不知道如何在其他拆分文件的开头插入输出?
猜你喜欢
  • 2013-02-04
  • 1970-01-01
  • 2010-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-05
  • 1970-01-01
相关资源
最近更新 更多