1

リンクに記載されている解決策を参照してくださいSmarter Removal Unnecessary WhiteSpace CSV

UNIX sed を使用してこれを実装する必要があります。

ソース CSV ファイルには、次のようなデータがあります。

"112", 21,,"4563446" , "VASQUE, HILARI", 365, "LOPEZ, ESTHER O" ,"16:06","00:00",, , 267.95, 463.48,"Test"

予期される出力 CSV ファイル:

"112",21,,"4563446","VASQUE, HILARI",365,"LOPEZ, ESTHER O","16:06","00:00",,,267.95,463.48,"Test"
4

2 に答える 2

3

適切なツールを使用して CSV を解析します。たとえば、Perl のText::CSV_XS :

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

use Text::CSV_XS;
my $csv = 'Text::CSV_XS'->new({ binary => 1,
                                allow_whitespace => 1,
                                eol => $/,
                              })
        or die 'Text::CSV_XS'->error_diag;

my @rows;
while (my $row = $csv->getline(*DATA)) {
    push @rows, $row;
}
$csv->eof or $csv->error_diag;

$csv->print(*STDOUT, $_) for @rows;

__DATA__
"112", 21,,"4563446" , "VASQUE, HILARI", 365, "LOPEZ, ESTHER O" ,"16:06","00:00",, , 267.95, 463.48,"Test"
于 2013-09-06T22:38:23.990 に答える
2

これはうまくいくかもしれません(GNU sed):

sed -r 's/^/\n/;ta;:a;s/\n$//;t;s/\n("[^"]*")/\1\n/;ta;s/\n(\S+)/\1\n/;ta;s/\n\s+/\n/;ta' file

これにより、行の先頭にマーカーが挿入され、それを使用して正規表現が固定され、先頭のスペースが削除されます。マーカーは、最後に到達するまでラインを移動し、その後削除されます。

リフレクションでは、sed を使用した代替ソリューションは次のとおりです。

sed -r 's/("[^"]*"|[^,]+|,)\s*,\s*/\1,/g' file
于 2013-09-07T06:53:04.247 に答える