【问题标题】:Add quotes to first line of CSV将引号添加到 CSV 的第一行
【发布时间】:2015-06-05 17:47:33
【问题描述】:

我希望通过添加引号来修改包含标题的 CSV(逗号分隔文件)的第一行。这是一个非常大的文件,我试图使用 AWK 来解决这个问题。

之前:

id,var1,var2
1,0.11,0.44
2,0.22,0.55
3,0.33,0.66

之后:

"id","var1","var2"
1,0.11,0.44
2,0.22,0.55
3,0.33,0.66

类似这样的东西,它为所有列添加引号,但对所有行:

awk -F"," -v quote="'" -v OFS="','" '$1=$1 {print quote $0 quote}' input.csv > output.csv

我只想在第一行加上引号。我尝试使用 NR,但无法正确使用语法来执行我想要的操作。

【问题讨论】:

    标签: bash csv awk


    【解决方案1】:

    你可以使用这个 awk:

    awk 'BEGIN{FS=OFS=","} NR==1{for (i=1; i<=NF; i++) $i = "\047" $i "\047"} 1' file
    'id','var1','var2'
    1,0.11,0.44
    2,0.22,0.55
    3,0.33,0.66
    

    编辑:如果您想在标题中使用双引号,请使用:

    awk 'BEGIN{FS=OFS=","} NR==1{for (i=1; i<=NF; i++) $i = "\042" $i "\042"} 1' file
    "id","var1","var2"
    1,0.11,0.44
    2,0.22,0.55
    3,0.33,0.66
    

    【讨论】:

    • 谢谢。完美运行。
    • 不要使用\x27,而是使用\047。问题变了吗?它要求双引号,但答案是添加单引号。
    • 实际上 OP 在显示的代码中使用了-v quote="'"。改成\047,谢谢。
    • 是的,但如果他的代码按照他的意愿行事,他就不会问这个问题:-)。他想要的输出显示双引号。
    【解决方案2】:

    如果您可以访问 GNU sed:

    sed '1s/\b\w*\b/"&"/g' file
    

    输出:

    “id” “var1” “var2” 1 0.11 0.44 2 0.22 0.55 3 0.33 0.66

    【讨论】:

      【解决方案3】:
      $ awk 'NR==1{gsub(/,/,"\",\""); $0="\""$0"\""} 1' file
      "id","var1","var2"
      1,0.11,0.44
      2,0.22,0.55
      3,0.33,0.66
      

      【讨论】:

        猜你喜欢
        • 2019-10-05
        • 2018-12-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多