comma separated values to single inverted quote and comma separated values

前端 未结 4 422
自闭症患者
自闭症患者 2021-01-07 13:49

I have data as

    abc,defg,hijklm,op,qrs,tuv

I want this data to be converted to

    \'abc\',\'defg\',\'hijklm\',\'op\',         


        
相关标签:
4条回答
  • 2021-01-07 13:51
    awk '{gsub(/,/,"\47,\47");print "\47"$0"\47"}' file
    
    'abc','defg','hijklm','op','qrs','tuv'
    
    0 讨论(0)
  • 2021-01-07 13:53

    Using awk gsub function. Here all the "," are replaced by ',' and start and the end of the line is replaced by "'".

    echo $x |awk -v q="'" '{gsub(/,/, q "&" q);gsub(/^|$/,q)}1'
    'abc','defg','hijklm','op','qrs','tuv'
    
    0 讨论(0)
  • 2021-01-07 14:01

    another awk

    $ awk -F, -v OFS="','" -v q="'" '{$1=q $1; print $0 q}' file
    
    0 讨论(0)
  • 2021-01-07 14:07

    Add a single quote at start (^) & end ($), and replace comma by quote-comma-quote (like you did) using sed with 3 expressions (using -e option to specify them):

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

    (also: protect single quotes with double quotes)

    results in:

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

    in awk (maybe a little clumsy), generally better since field parsing is handled natively by awk:

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

    (print all fields plus comma except for the last one)

    0 讨论(0)
提交回复
热议问题