2014-01-26 37 views
0

awk -F , '{if ($2 ~ /^".*"$/) $2 = substr($2, 2, length($2)-2); {gsub(/""/, "", $2);} print $2;}' sample.csv
刪除雙引號的CSV與分米內

我已經devloped上述awk到第2列刪除雙引號。所述awk工作正常爲以下內容

sample.csv

文件 「文件2」,sample.csv的file3的

輸出與上述awk

文件,文件2 ,file3

但是awk不工作克爲以下情形

sample1.csv

文件, 「FIL,E2」,file3的

輸出sample1.txt與上述awk

文件,「FIL, e2「,文件3

sample1.txt的必需輸出

文件,文件2,文件3

我知道這個問題是因爲雙引號中的逗號分隔符的,有沒有辦法跳過這一點。
我想刪除的第二列雙引號(如「網絡連接,L,E2」雙引號中的源可以包含多個逗號(,))

回答

5
$ cat file 
file,"file2",file3,"a,b,c","d,e" 

$ awk -F'"' -v OFS= '{for (i=2;i<=NF;i+=2) gsub(/,/,"",$i)}1' file 
file,file2,file3,abc,de 
+1

+1非常漂亮。請注意,這可能在輸入形式爲'file',文件'的文件\「中包含\」quotes「,...',但這完全是另一個問題。 –

+0

是的,有各種各樣的注意事項,其中最重要的是包含換行符的字段,所以希望OP爲他的數據發佈一些真實代表性的樣本輸入。如果他沒有,那麼所有的投注都關閉。 –