我有一个像这样的 CSV 源文件。
id;kat;kat_de;kat_en;kat_sub_de;kat_sub_en;name;strasse;plz;gemeinde;landkreis;stellplaetze;emob;linien;website;phone;betreiber;oeffnungszeiten;vbn;x_wgs84;y_wgs84;haltestelle
VW105044690;5;Kundencenter;Costumer Service Centres;retail,office,information,ticket;retail,office,information,ticket;Kunden-Servicecenter Vegesack BSAG Kundencenter;Vegesacker Bahnhofsplatz;28757;Bremen;Bremen;0;f;;https://bsag.de/de/tickets/kundencenter-servicestellen/bsag-kundencenter-vegesack.html https://bsag.de/de/tickets/kundencenter-servicestellen/bsag-kundencenter-vegesack.html;"";BSAG;"Mo-Fr 07:00-18:30; Sa 09:00-15:00; Su,PH off";f;8.628101750000006;53.16975189909493;
第 18 列包含 OSM 标签opening_hours的值。该值通常为英文。
我喜欢将Abbr.
英语Day of week
改为德语
Abbr. Day of week
Mo Monday
Tu Tuesday
We Wednesday
Th Thursday
Fr Friday
Sa Saturday
Su Sunday
PH off Public Holiday
到
Abbr. Day of week
Mo Monday
Di Tuesday
Mi Wednesday
Do Thursday
Fr Friday
Sa Saturday
So Sunday
Feiertag Public Holiday
off geschlossen
这意味着目标文件将看起来像这个例子。
id;kat;kat_de;kat_en;kat_sub_de;kat_sub_en;name;strasse;plz;gemeinde;landkreis;stellplaetze;emob;linien;website;phone;betreiber;oeffnungszeiten;vbn;x_wgs84;y_wgs84;haltestelle
VW105044690;5;Kundencenter;Costumer Service Centres;retail,office,information,ticket;retail,office,information,ticket;Kunden-Servicecenter Vegesack BSAG Kundencenter;Vegesacker Bahnhofsplatz;28757;Bremen;Bremen;0;f;;https://bsag.de/de/tickets/kundencenter-servicestellen/bsag-kundencenter-vegesack.html https://bsag.de/de/tickets/kundencenter-servicestellen/bsag-kundencenter-vegesack.html;"";BSAG;"Mo-Fr 07:00-18:30; Sa 09:00-15:00; So,Feiertag geschlossen";f;8.628101750000006;53.16975189909493;
知道如何使用 GNU/Linux shell 脚本来解决这个问题吗?
您同时遇到的问题太多了。正如评论中所要求的,您应该简化这个问题,一次只关注一个问题。
回答如何替代的问题:
输入:
Shell 代码使用
sed
:输出:
您很可能必须使用可以准确解析 SCSV 文件的工具,因此这里有一个示例
miller
(适用于多种操作系统);代码不是很微妙,但至少它专门针对该oeffnungszeiten
字段进行替换:输出: