【问题标题】:How to add quotes to first row and first 2 columns (csv - command line)如何将引号添加到第一行和前 2 列(csv - 命令行)
【发布时间】:2018-12-25 09:36:25
【问题描述】:

我有点挣扎,因为我需要在 csv 文件的第一行和前两列中添加双引号,如下所示:

输入

var1,var2,var3,var4   
x1,x2,x3,x4  
y1,y2,y3,y4  

输出:

"var1","var2","var3","var4"  
"x1","x2",x3,x4  
"y1","y2",y3,y4  

我已经尝试了一段时间,最接近的是:

# add single quotes around columns of csv files
sed "s/[[:alnum:]]*/'&'/g" input.csv >output1.csv
# transform the single quotes into double quotes
tr "'" '"' < output1.csv > output2.csv

但这是在所有列周围加上引号:

"var1","var2","var3","var4"  
"x1","x2","x3","x4"  
"y1","y2","y3","y4" 

您是更有经验的命令行用户,能帮助我吗?

【问题讨论】:

    标签: csv unix sed command-line


    【解决方案1】:

    您可以限定特定行号的替换

    $ sed '1s/[^,]*/"&"/g; 2,$s/\([^,]*\),\([^,]*\)/"\1","\2"/' ip.txt
    "var1","var2","var3","var4"
    "x1","x2",x3,x4
    "y1","y2",y3,y4
    
    • 1s/[^,]*/"&amp;"/g 为第一行的所有字段添加引号
    • 2,$s/\([^,]*\),\([^,]*\)/"\1","\2"/ 仅在从第 2 行到文件末尾的前两个字段中添加引号

    【讨论】:

    • 我很想了解更多关于 sed 的信息,但发现这些信息相当混乱。如果应该引用第一行和前 3 列,这个命令会怎样?我尝试在其中添加一个额外的, \([^,]*\)(删除第三列?),以及在没有运气的情况下玩弄这些数字。谢谢:-)
    • 前 3 列将是 2,$s/\([^,]*\),\([^,]*\),\([^,]*\)/"\1","\2","\3"/ .... 要了解有关 sed 的更多信息,我有一个全面的基于示例的 GNU sed 教程 (github.com/learnbyexample/Command-line-text-processing/blob/…) .. 有一个专门用于正则表达式的部分..也可以参考stackoverflow.com/tags/sed/info中提到的资源
    猜你喜欢
    • 2019-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-19
    • 2014-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多