【问题标题】:Replacing commas in a csv file with sed for mongoimport用 sed 替换 csv 文件中的逗号以进行 mongoimport
【发布时间】:2016-07-26 15:19:16
【问题描述】:

我有一个csv 文件,我需要用点替换所有逗号。也就是说,我只需要分号作为分隔符,逗号需要替换为点。 我需要这个才能使用mongoimport 导入数据。 我使用了 sed 命令,但它不会替换所有出现的逗号。例如:

Zolmitriptan;6 UNITA' 2,5 MG - USO ORALE;N02CC03;33345149;ZOMIG RAPIMELT;"""2,5 MG COMPRESSE ORODISPERSIBILI"" 6 COMPRESSE IN BLISTER";ASTRAZENECA S.P.A.;17,84;20,84;;3,00;FUB

变成了这个,sed 's/\,/\./' <filename>

Zolmitriptan;6 UNITA' 2.5 MG - USO ORALE;N02CC03;33345149;ZOMIG RAPIMELT;"""2,5 MG COMPRESSE ORODISPERSIBILI"" 6 COMPRESSE IN BLISTER";ASTRAZENECA S.P.A.;17,84;20,84;;3,00;FUB

请注意,仅替换了第一个逗号。我做错了什么?

PS。有没有办法让 mongoimport 忽略逗号? (在这种情况下我不需要更换)

【问题讨论】:

    标签: bash csv sed mongoimport


    【解决方案1】:

    这是一个有效的“sed”命令行。 它需要一个文件作为输入,并在数字 (0-9) 之后用点替换任何 .

    sed -i 's/\([0-9]\),/\1./g' your_file.csv
    

    评论:

    • -i 代表“就地”:文件本身被处理。小心,没有备份!
    • sed -i 's/blabla/foofoo/g' 会将任何出现的 blabla 替换为 foofoo。最后一个 g 选项表示如果多次找到 blabla,则在每行中替换多次。
    • [0-9] 表示从 0 到 9 的任何数字。
    • ([0-9]) 括号用于存储逗号前的数字。括号必须被转义。
    • \1 用于调用存储的内容并将其返回到点之前的结果中。它也必须被转义。

    示例:

    your_file.csv 之前

    stuff 12,004 hello -78,1
    anything456,78 what else 98765
    

    运行下一行

    sed -i 's/\([0-9]\),/\1./g' your_file.csv
    

    your_file.csv 之后

    stuff 12.004 hello -78.1
    anything456.78 what else 98765
    

    【讨论】:

    • 我很久以前就解决了这个问题,但感谢您的完整回答。不知道 -i 选项!这是一个赞成票!
    • 不错。智能移动
    【解决方案2】:

    我没有使用全局选项,所以

    sed 's/\,/\./g'
    

    现在正在工作。 不过,对于 mongoimport 替代方案,问题仍然存在!

    【讨论】:

    • 不需要转义任何一个字符。 , 在任何时候都不是元字符,. 在替换字符串上下文中也不是元字符。
    猜你喜欢
    • 2011-02-26
    • 2020-05-29
    • 1970-01-01
    • 2020-02-20
    • 2012-05-31
    • 1970-01-01
    • 1970-01-01
    • 2011-10-01
    相关资源
    最近更新 更多