只是想知道如何在字段周围添加单引号,因此我可以将其导入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'
我真的不知道从哪里开始,非常感谢您的帮助。
答案 0 :(得分:10)
你可以试试这个
awk -F"," -v quote="'" -v OFS="','" '$1=$1 {print quote $0 quote}' file
(-F"," -v OFS="','")
(print quote $0 quote)
答案 1 :(得分:1)
#!/usr/bin/awk -f
BEGIN { FS=OFS=","}
{
for (i = 1; i <= NF; ++i)
$i = "'" $i "'"
print
}
首先,将FS
(字段分隔符)设置为逗号;还将输出字段分隔符OFS
设置为逗号。
对于每个输入行,遍历所有字段。 NF
是从当前行解析出的字段数。将每个字段设置为由单引号括起来的值。
完成更新字段后,打印修改后的行。
答案 2 :(得分: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'
答案 3 :(得分:1)
这可能适合你(GNU sed):
sed -r 's/[^,]+/'\''&'\''/g' file
或:
sed -r "s/[^,]+/'&'/g" file
答案 4 :(得分:0)
awk
和sed
不会(轻松地)确定是否对字段分隔符(,
)进行了转义。 csv文件格式通过将整个字段括在双引号中来使字段中的,
字符转义(请参见RFC4180的2.6节)。
正如我在this answer中所述,一种更可靠的方法是使用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
)的csv编写器,以便所有字段都使用quotechar
设置为单引号; stdin
)中读取的csv阅读器。file
)馈送到其stdin
中。答案 5 :(得分:0)
awk 'BEGIN{FS=OFS=","}{for (i=1;i<=NF;++i) $i="~"$i"~"}{print}' $input_csv_file
这有效。在这里,我用~
将所有csv文件列括起来。