在 perl 中拆分大型 csv 文件

时间:2021-06-30 14:42:23

标签: perl split

我正在尝试拆分具有 150 万行的 CSV 文件

示例:

test;abc;kk
test1;abc1;kk1

以上完整数据存在于CSV第一列下

我试图通过尝试逐行读取 csv 但没有获得所需的输出来将这些字段映射到 json 对象。由于一些官方问题,我不认为使用 text::csv

#!/usr/bin/perl
use strict;
use warnings;

my $file = $ARGV[0] or die "Need to get CSV file on the command line\n";

open(my $data, '<', $file) or die "Could not open '$file' $!\n";

while (my $line = <$data>) {
     chomp $line;
     my @fields = split ";" , $line;
     for (my $i = 0; $i <= 2; $i++) {
       print "$fields[$i] ";
     }
}

My output now shows 
        t e s t ; a b c ; k k ; t e s t 1 ; a b c 1 ; k k 1.

我没有得到首选输出。我可能犯了一些错误 一旦我运行代码我得到

预期输出应该是第一次迭代......然后下一行进行第二次迭代

  fields[0] = test
  fields[1] = abc
  fields[2] = kk
     


  

1 个答案:

答案 0 :(得分:1)

尝试下一个代码,确保在 split 命令中您使用了正确的分隔符:

split ";" , $line;

这是perl代码

#!/usr/bin/perl
use strict;
use warnings;

my $file = $ARGV[0] or die "Need to get CSV file on the command line\n";

open(my $data, '<', $file) or die "Could not open '$file' $!\n";

my $line_no = 0;
while (my $line = <$data>) {
     chomp $line;
     $line_no++;
     print "Line $line_no:\n";
     my @fields = split ";" , $line;
     for (my $i = 0; $i <= 2; $i++) {
       print "fields[$i] = $fields[$i]\n";
     }
}

这里是输入文件的内容

test;abc;kk
test1;abc1;kk1

这是输出

Line 1:
fields[0] = test
fields[1] = abc
fields[2] = kk
Line 2:
fields[0] = test1
fields[1] = abc1
fields[2] = kk1