Just wondering how can I add single quotes around fields, so I can import it to mysql without warnings or errors.
I have a csv file with lots of content.
awk
and sed
are not going to (easily) determine whether the field separator (,
) is escaped or not. The csv file format escapes ,
characters within fields by surrounding the whole field in double quotes (see Section 2.6 of RFC4180).
As I describe in this answer, a more robust method is to use a csv library, rather than parsing as text using regular expressions and the like.
I found Python's library was the best choice because it's:
Based on the question's tags, I suspect these criteria will be appealing to you too.
Thus, try the following:
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
To break it down:
QUOTE_CSV_PY
is a shell variable containing the Python one-liner commandsstdout
) with QUOTE_ALL
set so all fields get quoted using quotechar
, which is set to a single quote;stdin
).file
) into its stdin
.