2016-11-30 294 views
0

我有數據逗號分隔值單倒引號和逗號分隔值

abc,defg,hijklm,op,qrs,tuv 

我想這個數據轉換爲

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

我想在linux下做的。我用「sed」。我一直在尋找所有的互聯網,但沒有遇到一個解決方案。請幫幫我。

+0

我會用'awk'。 – GMichael

+0

如果你的例子反映了你的輸入的** EXACT **結構,用''''替換所有'''可能會更簡單,然後在開始和結尾添加一個附加的'''。 – FDavidov

+0

我做了這個 | sed's /,/','/' 但它不起作用 – vkrishna

回答

1

在開始添加一個單引號(^)&末($),並通過報價逗號引號代替逗號(像你這樣),使用3個表達式(使用-e選項來指定它們)的sed:

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

(也:保護帶雙引號單引號)

結果:

'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);}" 

(打印所有字段以及除了最後一個逗號)

+0

完美的作品。感謝兄弟 – vkrishna

+0

你能解釋一下從第一個-e開始的內容。請,謝謝 – vkrishna

+0

編輯。看起來非常像你的嘗試,除了處理開始和結束。 –

1

使用awkgsub功能。這裏所有的「,」被替換爲','並且開始並且行的末尾被替換爲「'」。

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

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

另一awk

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