csvファイルの解析、区切り文字の置換、""の間のフィールドの内容を無視する

csvファイルの解析、区切り文字の置換、

区切り記号付きのファイルがあります;。私のアプリケーションは、これらの区切り文字に基づいてデータを解析します。文字列フィールドは列間""と列内にあり、テキストで区切り文字を使用できます。そのファイルの区切り文字を変更したい(例:に変更|""。例は次のとおりです。

入力する:

"BARCELONA";"";"Country.666;53;98";15;19;"test";4343;63647;655848

出力

"BARCELONA"|""|"Country.666;53;98"|15|19|"test"|4343|63647|655848

ベストアンサー1

正確な出力を得るには、

$ perl -MText::CSV -lpe '
    BEGIN{$p = Text::CSV->new({sep_char => ";"})} 
    $_ = join "|", map { /^\d+$/ ? $_ : qq("$_") } $p->fields() if $p->parse($_)
  ' INPUT
"BARCELONA"|""|"Country.666;53;98"|15|19|"test"|4343|63647|655848

枠にとらわれない言及にこだわらないと、

$ csvformat -d';' -D'|' INPUT
BARCELONA||Country.666;53;98|15|19|test|4343|63647|655848

数値以外の値を参照するように入力と出力を強制します。ほぼ必要な方法で動作しますが、明らかに数値フィールドを浮動小数点に昇格します。

$ csvformat -d';' -u2 -D'|' -U2 INPUT
"BARCELONA"|""|"Country.666;53;98"|15.0|19.0|"test"|4343.0|63647.0|655848.0

おすすめ記事