2016-11-30 18 views
0

私はカンマ区切り

abc,defg,hijklm,op,qrs,tuv 

としてデータを持っている私は、このデータは、私は、Linuxでやりたい

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

に変換することにしたいです。私は "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