首页 > 解决方案 > 如何使用 perl 从 CSV 文件中删除最后一列

问题描述

如何,从每行中删除尾随?

现有的 CSV 文件:

S.NO,NAME,S1,S2,S3,S4,S5,       
1,aaaaaaa,66,88,77,55,99,       
2,bbbbbbb,55,66,88,99,77,           

代码是:

 #!/usr/bin/perl


  use strict;
  use warnings;


 open my $inn, '<', 'a1.csv' or die "Cannot open file for input: $!";
 open my $outt, '>', 'a2.csv' or die "Cannot open file for output: $!";

foreach my $line (<$inn>) {
  chomp $line;
  my @data = split /,/, $line;
  printf $outt "%s,%d\n", $data[0], scalar grep /^GO:/, @data;
 }   

我预期的输出 CSV 文件:

S.NO,NAME,S1,S2,S3,S4,S5                  
1,aaaaaaa,66,88,77,55,99          
2,bbbbbbb,55,66,88,99,77

标签: perl

解决方案


一次处理一行文件时,最好使用while(它也一次读取文件一行)而不是foreach(在给你第一行之前读取整个文件)。

如果您只想删除最后的逗号,则无需将文件视为 CSV 文件。

#!/usr/bin/perl

use strict;
use warnings;

open my $inn, '<', 'a1.csv' or die "Cannot open file for input: $!";
open my $outt, '>', 'a2.csv' or die "Cannot open file for output: $!";

while (<$inn>) {
  # Remove trailing comma on first line
  s/,$// if $. == 1;
  print $outt $_;
}

推荐阅读