引用符付きCSVファイルからカンマを削除する方法は?

引用符付きCSVファイルからカンマを削除する方法は?

私の入力は次のとおりです

Name, Country, City
Jason, US, Memphis, "1,000"
David, US, Little Rock, "8,765,453"
"Karam, Sage", US, Nazareth, "4,678"
"David, simon", US, Chicago, "1,234"

私は出力が次のようになります:

Name, Country, City
Jason, US, Memphis, "1000"
David, US, Little Rock, "8765453"
"Karam, Sage", US, Nazareth, "4678"
"David, simon", US, Chicago, "1234"

最初の列ではなく4番目の列からのみカンマを削除したいと思います。

答え1

またはパールを使用してください:

perl -pe 's/(\d),(\d)/$1$2/g' infile.txt

数字(\ d)で囲まれたすべてのカンマを削除します。

何千もの区切り文字を削除するのが作業の中心だと思います。カンマのある列ではありません。

答え2

これを行う1つの方法は、4番目のコミットが最後のコミットであると仮定することですAWK

awk -F\" '{gsub(",","",$(NF-1))}1' OFS=\" infile.txt

出力は次のとおりです

Name, Country, City
Jason, US, Memphis, "1000"
David, US, Little Rock, "8765453"
"Karam, Sage", US, Nazareth, "4678"
"David, simon", US, Chicago, "1234"

答え3

そしてsed

sed -e ':a' -e 's/,\([^"]*"$\)/\1/;ta' infile.txt

2番目の二重引用符の後に削除するコンマがある場合は、繰り返すことができます。

答え4

CSVデータを解析するには、CSVパーサーを使用することをお勧めします。 Rubyには1つあります。

ruby -rcsv -e '
  data = CSV.read(ARGV.shift, :col_sep => ", ")
  out = CSV.new($stdout, :col_sep => ", ")
  data.each {|row| row[-1].delete! ","; out << row}
' file.csv
Name, Country, City
Jason, US, Memphis, 1000
David, US, "Little Rock", 8765453
"Karam, Sage", US, Nazareth, 4678
"David, simon", US, Chicago, 1234

関連情報