Skip to content

Instantly share code, notes, and snippets.

@huandu
Created December 3, 2014 05:28
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save huandu/869fe48d6e3795875bfb to your computer and use it in GitHub Desktop.
Save huandu/869fe48d6e3795875bfb to your computer and use it in GitHub Desktop.
Demo to parse CSV file with awk.
# parse csv files to an awk array.
awk -F, '{
parse_csv(r);
# replace following line with your code.
print r[1], r[2], r[3], r[4];
} function parse_csv(r, _quote, _i, _n) {
_i = 1;
_quote = 0; # in a quoted string or not.
for (_n = 1; _n <= NF; _n++) {
if (_quote) {
# quote string meets its end.
if (substr($_n, length($_n), 1) == "\"") {
_quote = 0;
r[_i] = r[_i]","substr($_n, 1, length($_n) - 1);
_i++;
} else {
# concat quote string with ",".
r[_i] = r[_i]","$_n;
}
} else {
# it is a quote string.
if (substr($_n, 1, 1) == "\"") {
_quote = 1;
r[_i] = substr($_n, 2);
} else {
# copy content for normal string without quote.
r[_i] = $_n;
_i++;
}
}
}
}'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment