# csv-awk

Copyright (C) 2025 Jonathan Lamothe <jonathan@jlamothe.net>

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Affero General Public License for more details.

You should have received a copy of the GNU Affero General Public
License along with this program.  If not, see
<https://www.gnu.org/licenses/>.

## Executive Summary

These are quick and dirty Python scripts I threw together to
facilitate manipulating CSV files with AWK.  They are heavily inspired
by [csvquote](https://github.com/adamgordonbell/csvquote).  I just
didn't want to have to install go on a machine to use it.  I wrote
this one in Python because that's very likely to already be present on
most any modern UNIX-ey system.

It provides two scripts: `csv-reader.py` and `csv-writer.py` which
read and write CSV files respectively (converting to and from a
simpler format).  Both read from standard input and write to standard
output.  The format they convert the CSV to/from works as follows:

- Each row is represented as a single line of text.
- Cells are separated by tab characters.
- Certain special characters within the cells are substituted for other values as follows:
  - Newlines become `~n`.
  - Carriage returns become `~r`.
  - Tabs become `~t`.
  - Tildes (`~`) become `~!`.
- All other characters remain unchanged.

## Disclaimer

I haven't seriously looked at Python in over a decade and I hacked
this together in like 30 minutes.  Don't go looking for the most well
put-together code you've ever seen.  It gets the job done though.