
入力例:
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,,
3番目の列は私のプロジェクトで問題を引き起こし、最も簡単な解決策は必要ないので、単に削除することです。コンマはそのままにしておく必要があり、空の内容のみが必要です。
sed
3番目の列を削除するコマンドの前に、引用符に含まれるコンマを削除するコマンドを開発する必要があるようです。最も簡単な方法は、カンマの数を数えて2番目と3番目のカンマの両方を削除することです。
これは、3 番目の列の内容を消去する前に引用符内のコンマを削除するために使用する 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
そのファイルを開くこともできます)。