to-json.sh 381 B

12345678910111213141516171819202122232425
  1. #!/bin/sh
  2. set -eu
  3. # If a filename is provided use it, otherwise read from stdin.
  4. CSV=${1:-/dev/stdin}
  5. awk -F, '
  6. NR==1 {
  7. # Store header names.
  8. for (i=1; i<=NF; i++) header[i]=$i;
  9. print "["
  10. }
  11. NR>1 {
  12. printf "%s{", sep;
  13. for (i=1; i<=NF; i++) {
  14. printf "%s\"%s\":\"%s\"", (i>1?",":""), header[i], $i;
  15. }
  16. printf "}"
  17. sep = ",\n"
  18. }
  19. END {
  20. print "\n]"
  21. }
  22. ' "$CSV"