diff options
Diffstat (limited to 'awklib/eg/lib/tocsv.awk')
-rw-r--r-- | awklib/eg/lib/tocsv.awk | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/awklib/eg/lib/tocsv.awk b/awklib/eg/lib/tocsv.awk new file mode 100644 index 00000000..42b79c5b --- /dev/null +++ b/awklib/eg/lib/tocsv.awk @@ -0,0 +1,36 @@ +# tocsv.awk --- convert data to CSV format +# +# Arnold Robbins, arnold@skeeve.com, Public Domain +# April 2023 + +function tocsv(fields, sep, i, j, nfields, result) +{ + if (length(fields) == 0) + return "" + + if (sep == "") + sep = "," + delete nfields + for (i = 1; i in fields; i++) { + nfields[i] = fields[i] + if (nfields[i] ~ /["\n]/ || index(nfields[i], sep) != 0) { + gsub(/"/, "\"\"", nfields[i]) # double up quotes + nfields[i] = "\"" nfields[i] "\"" # wrap in quotes + } + } + + result = nfields[1] + j = length(nfields) + for (i = 2; i <= j; i++) + result = result sep nfields[i] + + return result +} +function tocsv_rec(sep, i, fields) +{ + delete fields + for (i = 1; i <= NF; i++) + fields[i] = $i + + return tocsv(fields, sep) +} |