ubuntuusers.de

Wie kann ich in einer CSV alle Werte mit Hochkomma setzen?

Status: Gelöst | Ubuntu-Version: Server 22.10 (Kinetic Kudu)
Antworten |

rurotil

Anmeldungsdatum:
7. April 2009

Beiträge: 102

Hallo,

wie kann ich eine CSV Datei, z.B. hier:

External ID;Name;Product Type;Internal reference;Barcode;Sales Price;Cost;Weight;Sales Description
;Samsung LCD S200UNU 27 black;;40288;LSNUXEN;436,13;369;;

Jede Zelle mit Hochkomma setzen?

External ID";"Name";"Product Type";"Internal reference";"Barcode";"Sales Price";"Cost";"Weight";"Sales Description
";"Samsung LCD S200UNU 27 black";"";"40288";"LSNUXEN";"436,13";"369";"";"

dingsbums

Anmeldungsdatum:
13. November 2010

Beiträge: 3762

Probiere

sed -i 's#^#"#g;s#;#";"#g;s#$#"#g' datei

frostschutz

Avatar von frostschutz

Anmeldungsdatum:
18. November 2010

Beiträge: 7744

evtl. auch mit sed -e 's@[^;]*@"\0"@g'

Aber mit sed an CSV herum zu hantieren kann auch schnell nach hinten losgehen. Hier wird nichts geprüft (ob schon " da sind oder sonstige Sonderzeichen usw.)

Mit einem dedizierten CSV Parser/Tool könnte man es vielleicht gescheiter hinbekommen:

xsv fmt --delimiter ';' --out-delimiter ';' --quote-always datei.csv

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13075

Wenn man ein passendes Tool dafür nutzt, geht es recht einfach:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
require 'csv'

row = ["a", 2, "xyz"]
p row

puts row.to_csv
puts row.to_csv(col_sep: ';')

puts row.to_csv(force_quotes: true)
puts row.to_csv(col_sep: ';', force_quotes: true)

Dann:

1
2
3
4
5
["a", 2, "xyz"]
a,2,xyz
a;2;xyz
"a","2","xyz"
"a";"2";"xyz"

Als kompletter Konverter

1
2
3
4
5
6
7
#!/usr/bin/ruby

require 'csv'

CSV.foreach(ARGV.shift, col_sep: ';') do |record|
  puts record.to_csv(col_sep: ';', force_quotes: true)
end

rurotil

(Themenstarter)

Anmeldungsdatum:
7. April 2009

Beiträge: 102

vielen dank, das hat funktioniert ☺

Antworten |