【问题标题】:Create csv out of a file that has three columns with bash使用 bash 从包含三列的文件中创建 csv
【发布时间】:2014-09-19 23:51:21
【问题描述】:

我比较熟悉 bash 脚本。我有一个包含三列数据的常规 txt 文件。我想把它变成 csv 格式。

hagabe   3322   7/28/14
uenebh   3878   7/26/14
jheheb   5569   7/27/14

让它看起来像:

hagabe,3322,7/28/14

我知道我可以获取每一列并制作一个文件,然后使用粘贴来创建 csv,但这似乎太过分了。必须有一个更简单的方法。简单地删除空格并添加逗号是否合乎逻辑?任何建议表示赞赏!

【问题讨论】:

  • 假设数据是制表符分隔的:tr '\t' ','

标签: bash csv scripting


【解决方案1】:

只需使用awk 并将OFS 设置为,

awk -v OFS=, '{$1=$1}1' file

输出:

hagabe,3322,7/28/14
uenebh,3878,7/26/14
jheheb,5569,7/27/14

【讨论】:

  • 这是惯用的 awk 答案。看起来很奇怪的$1=$1 可以强制 awk 使用输出字段分隔符重新格式化该行。 NF 条件不是绝对必要的。
【解决方案2】:

通过 awk,

$ awk '{gsub(/ +/,",")}1' file
hagabe,3322,7/28/14
uenebh,3878,7/26/14
jheheb,5569,7/27/14

【讨论】:

    【解决方案3】:
    $ cat in
    hagabe   3322   7/28/14
    uenebh   3878   7/26/14
    jheheb   5569   7/27/14
    
    $ while read -ra line; do IFS=, eval echo \"\${line[*]}\"; done <in
    hagabe,3322,7/28/14
    uenebh,3878,7/26/14
    jheheb,5569,7/27/14
    

    【讨论】:

      【解决方案4】:

      通过 sed 管道传输您的文件:

      cat <file> | sed 's/[ ]\+/,/g'
      

      【讨论】:

      • cat &lt;file&gt; | sed 's/[ ]\+/,/g' 或更短的sed 's/[ ]\+/,/g' &lt;file&gt;
      猜你喜欢
      • 2020-09-08
      • 2017-10-04
      • 2020-08-04
      • 1970-01-01
      • 2021-04-19
      • 2016-07-25
      • 1970-01-01
      • 1970-01-01
      • 2013-04-09
      相关资源
      最近更新 更多