![](/img/trans.png)
[英]How to add quotes for awk when single and double quotes are already used?
[英]How to add single quotes around columns using awk
只是想知道如何在字段周圍添加單引號,以便我可以將它導入到 mysql 中而不會出現警告或錯誤。
我有一個包含大量內容的 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'
我真的不知道從哪里開始,非常感謝您的幫助。
你可以試試這個
awk -F"," -v quote="'" -v OFS="','" '$1=$1 {print quote $0 quote}' file
(-F"," -v OFS="','")
(print quote $0 quote)
#!/usr/bin/awk -f
BEGIN { FS=OFS=","}
{
for (i = 1; i <= NF; ++i)
$i = "'" $i "'"
print
}
開始時,將FS
(字段分隔符)設置為逗號; 還將輸出字段分隔符OFS
設置為逗號。
對於每個輸入行,循環遍歷所有字段。 NF
是從當前行解析出的字段數。 將每個字段設置為由單引號括起來的自己的值。
完成更新字段后,打印修改后的行。
試試這個:
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'
這可能對你有用(GNU sed):
sed -r 's/[^,]+/'\''&'\''/g' file
要么:
sed -r "s/[^,]+/'&'/g" file
awk
和sed
不會(輕松)確定字段分隔符 ( ,
) 是否被轉義。 CSV文件格式逃脫,
通過在雙引號(見第2.6節整場周邊領域內的字符RFC4180 )。
正如我在這個答案中所描述的,一種更強大的方法是使用 csv 庫,而不是使用正則表達式等解析為文本。
我發現 Python 的庫是最好的選擇,因為它是:
根據問題的標簽,我懷疑這些標准也會吸引您。
因此,請嘗試以下操作:
QUOTE_CSV_PY="import sys; import csv; csv.writer(sys.stdout, quoting=csv.QUOTE_ALL, quotechar=\"'\").writerows(csv.reader(sys.stdin))"
python -c "$QUOTE_CSV_PY" < file
分解:
QUOTE_CSV_PY
是包含 Python 單行命令的 shell 變量stdout
)與QUOTE_ALL
集等等各個領域得到引述使用quotechar
,它被設置為一個單引號;stdin
)讀取的 csv 閱讀器。file
) stdin
到它的stdin
。awk 'BEGIN{FS=OFS=","}{for (i=1;i<=NF;++i) $i="~"$i"~"}{print}' $input_csv_file
這有效。 在這里,我用~
將所有 csv 文件列括起來。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.