需要删除 CSV 中的特定列

需要删除 CSV 中的特定列

输入示例:

A0021,,Outside state ambulance serv,I,,0,0,,
A4217,,"Sterile water/saline, 500 ml",X,,
A4672,,"Drainage ext line, dialysis",X,,

第一个 sed 命令后的输出示例

sed -i 's/("[^,])[,]([^"]")/\1\2/g' 文件.csv :

A0021,,Outside state ambulance serv,I,,0,0,,
A4217,,"Sterile water/saline, 500 ml",X,,
A4672,,"Drainage ext line dialysis",X,,

最后一个命令后所需的输出:

A0021,,,I,,0,0,,
A4217,,,X,,
A4672,,,X,,

第三列一直给我带来项目中的问题,最简单的解决方案就是简单地删除它,因为它没有必要。逗号应该保留,它应该只有空内容。

我想我需要开发一个sed命令来删除删除第三列的命令之前的引号中包含的逗号,因为我认为最简单的方法是计算逗号的数量,然后删除之间的所有内容第二个和第三个逗号。

这是 sed 命令,我正在使用删除引号内的逗号,然后再继续清除第三列的内容

答案1

像这样的事情就可以解决问题:

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

use Text::CSV;

my $csv = Text::CSV->new( { binary => 1, eol => "\n" } );

open( my $input, '<', 'test3.csv' ) or die $!;

while ( my $row = $csv->getline($input) ) {
   $row->[2] = "";
   $csv -> print( \*STDOUT, $row );
}

(您可能想打开一个输出文件并print改为打开该文件)。

相关内容