【问题标题】:How to Change Delimeter of a Csv file如何更改 Csv 文件的分隔符
【发布时间】:2020-11-25 08:19:21
【问题描述】:

我需要将 csv 文件的分隔符从逗号(,) 更改为 Pipe(|) 符号。

注意:这里的文件分隔符也出现在数据字符串中。我需要跳过那个值我尝试了一个命令但它也在改变内幕逗号awk '$1=$1' FS="," OFS=":" Sample.csv(我试过这个但没有给出预期的输出)

输入 > 样本.csv

Col1, Col2, Col3 , Col4
101, XYZ, 2020 , "Hello, World"
102, PQR, 2021, "Help, Me"

输出> Sample_Out.csv 应该是这样的。

Col1| Col2| Col3|Col4
101 | XYZ | 2020 | "Hello, World"
102 | PQR |2021 | "Help, Me"

【问题讨论】:

标签: bash unix


【解决方案1】:

试试这个,需要对双引号进行特殊处理,所以用它拆分字段,处理备用字段并将逗号替换为管道。

awk '{for(i=1; i<=NF; i+=2) gsub(",","|",$i)}1' FS=\" OFS=\" Sample.csv

输出:

Col1| Col2| Col3 | Col4
101| XYZ| 2020 | "Hello, World"
102| PQR| 2021| "Help, Me"

【讨论】:

    【解决方案2】:

    您必须执行一些操作来处理这些引用的逗号。 您可以开始将它们更改为其他内容:

    awk -F'"' -v OFS='' '{ for (i=2; i<=NF; i+=2) gsub(",", "§", $i) } 1' Sample.csv
    

    然后你可以把剩下的逗号改成你想要的:

    awk '$1=$1' FS="," OFS=":" Sample.csv
    

    然后你把 § 改成它之前的逗号

    awk '$1=$1' FS="§" OFS="," Sample.csv
    

    我认为你可以制作一个 awk 文件并将所有步骤放入其中。

    【讨论】:

      【解决方案3】:

      awk 用于原始文本处理,因此无法处理引号中的逗号。相反,您应该使用为 csv 设计的工具,例如 csvtool:

      csvtool -u \| -t , cat Sample.csv > Sample_Out.csv
      

      来自csvtool文档:

      -t 输入分隔符。

      -u 输出分隔符。

      猫

      这会将输入文件连接在一起并将它们写入 输出。您可以使用它来更改分隔符。

       Example: csvtool -t TAB -u COMMA cat input.tsv > output.csv
      

      否则,您可以使用ruby 关注this question。您还可以使用python 或其他处理 csv 文件的编程语言。

      【讨论】:

        猜你喜欢
        • 2015-10-12
        • 1970-01-01
        • 2017-12-28
        • 2020-07-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多