使用Perl合并多个csv文件

使用Perl合并多个csv文件,perl,csv,merge,Perl,Csv,Merge,对于这个简单的问题,我很抱歉 我有一个生成7个csv文件的Perl脚本。所有这些文件都有8个公共列标题 文件名将保持不变,每个文件只有8列,并且每列的每个值中始终包含数据 每个文件的文件大小永远不会超过400k 我想使用Perl将这些csv文件合并成一个文件。输出将具有相同的列标题和来自所有7个文件的数据。如果您在某种Unix上,可以使用tail $ tail -qn +2 fileA fileB ... -q在输出中抑制文件名;-n+2从第2行开始输出 要同时获取标题,请执行以下操作: $

对于这个简单的问题,我很抱歉

我有一个生成7个csv文件的Perl脚本。所有这些文件都有8个公共列标题

文件名将保持不变,每个文件只有8列,并且每列的每个值中始终包含数据

每个文件的文件大小永远不会超过400k


我想使用Perl将这些csv文件合并成一个文件。输出将具有相同的列标题和来自所有7个文件的数据。

如果您在某种Unix上,可以使用
tail

$ tail -qn +2 fileA fileB ...
-q
在输出中抑制文件名;
-n+2
从第2行开始输出

要同时获取标题,请执行以下操作:

$ (head -n 1 fileA; tail -qn +2 fileA fileB ...) > output-file
如果需要使用Perl:

use strict; use warnings; use autodie;
my $files = $#ARGV; # get number of files - 1
while (my $file = shift @ARGV) {
  open my $fh, "<", $file;
  <$fh> unless $files == @ARGV; # discard header unless first file
  print while <$fh>; # output the rest
}
使用严格;使用警告;使用自动模具;
我的$files=$#ARGV;#获取文件数-1
while(my$file=shift@ARGV){

打开我的$fh,“如果您在某种Unix上,您可以使用
tail

$ tail -qn +2 fileA fileB ...
-q
禁止输出中的文件名;
-n+2
从第二行开始输出

要同时获取标题,请执行以下操作:

$ (head -n 1 fileA; tail -qn +2 fileA fileB ...) > output-file
如果需要使用Perl:

use strict; use warnings; use autodie;
my $files = $#ARGV; # get number of files - 1
while (my $file = shift @ARGV) {
  open my $fh, "<", $file;
  <$fh> unless $files == @ARGV; # discard header unless first file
  print while <$fh>; # output the rest
}
使用严格;使用警告;使用autodie;
my$files=$#ARGV;#获取文件数-1
while(my$file=shift@ARGV){

打开我的$fh,”因此,您只想附加文件,但删除中间的标题?为什么不编辑主Perl脚本以打印到一个文件,而不是7个不同的文件?Amon-是的,只需附加并删除headerTLP-我从不再与我合作的人那里获取脚本。我从中提取数据的系统只允许通过od提取一个报告bc每个连接,因此我循环脚本以生成单个文件。其他用户需要这些单独的文件,但我也需要一个组合文件。如果同一行出现在多个文件中,是否也要删除重复的文件?因此,您只想附加文件,但删除中间的标题?为什么不编辑ma在Perl脚本中,打印到一个文件而不是7个不同的文件?Amon-是的,只需附加和删除headerTLP-我从不再与我一起工作的人那里获取一个脚本。我从中提取数据的系统只允许每个连接通过odbc提取一个报告,因此我循环脚本以生成各个文件。这些单独的其他用户需要les,但我也需要一个组合文件。如果同一行出现在多个文件中,是否还要删除重复的文件?