2013-05-10 92 views
0

想知道如何在字段中添加單引號,這樣我就可以將它導入到mysql而不會出現警告或錯誤。如何使用awk在列周圍添加單引號

我有一個包含大量內容的csv文件。

16:47:11,3,r-4-VM,250000000.,0.50822578824,131072,0,0,0,0,0 

所需的輸出

'16:47:07','3','r-4-VM','230000000.','0.466028518635','131072','0','0','0','60','0' 

我真的不知道從哪裏開始,你的幫助是高度讚賞。

回答

1
#!/usr/bin/awk -f 

BEGIN { FS=OFS=","} 

{ 
    for (i = 1; i <= NF; ++i) 
     $i = "'" $i "'" 
    print 
} 

開始時,將FS(字段分隔符)設置爲逗號;也設置OFS,輸出字段分隔符爲逗號。

對於每個輸入行,循環遍歷所有字段。 NF是從當前行解析出的字段數。將每個字段設置爲由單引號包圍的自己的值。

完成更新字段後,打印修改過的行。

1

試試這個:

awk '{gsub(/^|$/,"\x027");gsub(/,/,"\x027,\x027")}7' file 

例如

kent$ echo "16:47:11,3,r-4-VM,250000000.,0.50822578824,131072,0,0,0,0,0"|awk '{gsub(/^|$/,"\x027");gsub(/,/,"\x027,\x027")}7' 
'16:47:11','3','r-4-VM','250000000.','0.50822578824','131072','0','0','0','0','0' 
9

你可以試試這個

awk -F"," -v quote="'" -v OFS="','" '$1=$1 {print quote $0 quote}' file 
  1. 與( '' 報價逗號替換每個分隔符(,逗號) -quote) - >(-F"," -v OFS="','")
  2. 添加引號來開始和行結束 - >(print quote $0 quote)
+2

的'$ 1 = $ 1 '成語使我困惑,但Google找到了我的解釋。通過分配甚至一個字段,您可以強制AWK重建整條線,從而將原始字段分隔符更改爲新字段。 http://backreference.org/2010/02/10/idiomatic-awk/ – steveha 2013-05-10 21:39:09

1

這可能爲你工作(GNU SED):

sed -r 's/[^,]+/'\''&'\''/g' file 

或:

sed -r "s/[^,]+/'&'/g" file