【问题标题】:comma separated values to single inverted quote and comma separated values逗号分隔值到单引号和逗号分隔值
【发布时间】:2016-11-30 05:46:42
【问题描述】:

我有数据

    abc,defg,hijklm,op,qrs,tuv

我希望将此数据转换为

    'abc','defg','hijklm','op','qrs','tuv'

我想在linux中做。我用了“sed”。我一直在寻找整个互联网,但没有找到解决方案。请帮帮我。

【问题讨论】:

  • 我会使用awk
  • 如果您的示例反映了您输入的 EXACT 结构,则将所有, 替换为',' 可能会更简单,然后在开头和结尾添加一个额外的'
  • 我这样做了 | sed 's/,/','/' 但它不起作用

标签: linux bash shell


【解决方案1】:

在开始 (^) 和结束 ($) 处添加单引号,并使用带有 3 个表达式的 sed 将逗号替换为 quote-comma-quote(就像您所做的那样)(使用 -e 选项来指定它们):

echo  abc,defg,hijklm,op,qrs,tuv | sed -e "s/^/'/" -e "s/\$/'/" -e "s/,/',\'/g" 

(also: 用双引号保护单引号)

结果:

'abc','defg','hijklm','op','qrs','tuv'

awk(可能有点笨拙),通常更好,因为字段解析由awk本地处理:

echo  abc,defg,hijklm,op,qrs,tuv | awk -F, "{for (i=1;i<=NF-1;i++) printf(\"'%s',\",\$i); printf(\"'%s'\",\$i);}"

(打印除最后一个以外的所有字段加逗号)

【讨论】:

    【解决方案2】:

    使用awk gsub 函数。这里所有的“,”都替换为',',并且开始和行尾都替换为“'”。

    echo $x |awk -v q="'" '{gsub(/,/, q "&" q);gsub(/^|$/,q)}1'
    'abc','defg','hijklm','op','qrs','tuv'
    

    【讨论】:

      【解决方案3】:
      awk '{gsub(/,/,"\47,\47");print "\47"$0"\47"}' file
      
      'abc','defg','hijklm','op','qrs','tuv'
      

      【讨论】:

        【解决方案4】:

        另一个awk

        $ awk -F, -v OFS="','" -v q="'" '{$1=q $1; print $0 q}' file
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-12-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-08-19
          相关资源
          最近更新 更多