<h2 id="introduction">Introduction</h2>
<p>This is the sixteenth and final episode of the <code>'</code><a href="https://hackerpublicradio.org/series/0094.html" title="Learning Awk">Learning Awk</a><code>'</code> series which is being produced by <a href="https://hackerpublicradio.org/correspondents/0300.html" title="b-yeezi">b-yeezi</a> (BY) and <a href="https://hackerpublicradio.org/correspondents/0225.html" title="Dave Morriss">Dave Morriss</a> (DM).</p>
<p>We are using this as an opportunity to have a round-table discussion about the series, about Awk, and where we recommend the listeners should go from here. Including this one we have produced 16 episodes covering the features most likely to be used in pipelines on the command line or in simple shell and awk scripts.</p>
<p><small> Note that although the HPR site will list this episode as having a single host, in fact it has two! Plans are afoot to enhance the HPR database so we can eventually indicate this properly. </small></p>
<h2 id="topics-discussed">Topics Discussed</h2>
<ul>
<li>The series
<ul>
<li>Started in 2016 (first show released 2016-07-13)</li>
<li>Finishing in 2019</li>
<li>16 episodes in total</li>
</ul></li>
</ul>
<ul>
<li>Why are we finishing the series?
<ul>
<li>We have probably reached the limit of what is useful on the command line or in shell scripts or even in manageable-sized Awk scripts</li>
<li>Awk shows its limitations as we go on and doesn’t compare well with more modern text processing languages</li>
</ul></li>
</ul>
<ul>
<li>Our personal experiences with Awk
<ul>
<li>BY:
<ul>
<li>Started with sed and awk when first moving to Linux in 2011</li>
<li>(ongoing) Exploring and cleaning client data</li>
<li>(ongoing) Personal scripts when adding python or other tool would be overkill</li>
</ul></li>
<li>DM:
<ul>
<li>Working with VAX/VMS in the 1980’s. No very good text processing features built-in, so Gnu Awk (and sed) was a great way to handle the data we were using to generate accounts for new students each year. Could easily spot bad records, do some data validation (for example impossible dates of birth).</li>
<li>Later in the late 1980’s and early 1990’s more Unix systems came on the scene running HP-UX, Ultrix, SunOS, Solaris, OSF/1, True64 Unix, and awk was very much used there.</li>
<li>Later still we moved to Linux; initially Fedora but later RHEL, and of course awk figured in the list of tools there as well.</li>
</ul></li>
</ul></li>
</ul>
<ul>
<li>What have we left out? Why?
<ul>
<li>User-defined functions are pretty clunky and hard to use</li>
<li>Multi-dimensional arrays: other languages do this better</li>
<li>Internationalization: assumes you’re writing <em>big</em> awk programs</li>
<li>The <code>gawk</code> debugger: quite clever but probably overkill for this series</li>
<li>Extensions written in C and C++: some come with <code>gawk</code> and look quite good, but this subject is out of scope</li>
</ul></li>
</ul>
<ul>
<li>What to use as an alternative to Awk?
<ul>
<li>DM moved from <code>gawk</code> to Perl (version 4) in the 1980’s and later to Perl version 5. This might have engendered an <em>awk</em>y, <em>Bash</em>y mindset that’s hard to shake off. Not the recommended place to start these days.</li>
<li>BY moved from <code>gawk</code> to Python and R for large projects. For interactive <em>Bash</em>y exploration, moved to <a href="https://github.com/BurntSushi/xsv" title="XSV">XSV</a>, <a href="https://harelba.github.io/q/" title="q to run SQL on csv files">q</a>, and <a href="https://csvkit.readthedocs.io/en/latest/" title="CSV Kit">csv-kit</a> for most use cases.</li>
<li>These tools have built-in convenience features, like accounting for headers, data types, and file encodings</li>
</ul></li>
</ul>
<ul>
<li>What’s next?
<ul>
<li>It is planned to turn the notes for this series into a combined document which will be available on the HPR site and on archive.org. There is no timescale for this at the moment</li>
</ul></li>
</ul>
<h2 id="links">Links</h2>
<ul>
<li><a href="https://www.gnu.org/software/gawk/manual/html_node/index.html"><em>GNU Awk User’s Guide</em></a>
<ul>
<li><a href="https://www.gnu.org/software/gawk/manual/gawk.html#Internationalization"><em>Internationalization with gawk</em></a></li>
</ul></li>
</ul>
<ul>
<li><a href="https://catonmat.net/proof-that-sed-is-turing-complete"><em>A proof that Unix utility sed is Turing complete</em></a></li>
<li><a href="https://mutagen.readthedocs.io/en/latest/"><em>Mutagen</em></a> - discussed as an alternative way to access audio metadata (<em>tags</em>) from Python</li>
<li><a href="https://github.com/BurntSushi/xsv"><em>XSV</em></a></li>
<li><a href="https://csvkit.readthedocs.io/en/latest/"><em>csvkit</em></a></li>
<li><a href="https://harelba.github.io/q/"><em>Run SQL on CSV files with <b>q</b></em></a></li>
</ul>
<ul>
<li>Links to all of the shows in this series on HPR:
<ul>
<li><a href="https://hackerpublicradio.org/eps.php?id=2114"><em>Gnu Awk - Part 1</em></a> - episode 2114</li>
<li><a href="https://hackerpublicradio.org/eps.php?id=2129"><em>Gnu Awk - Part 2</em></a> - episode 2129</li>
<li><a href="https://hackerpublicradio.org/eps.php?id=2143"><em>Gnu Awk - Part 3</em></a> - episode 2143</li>
<li><a href="https://hackerpublicradio.org/eps.php?id=2163"><em>Gnu Awk - Part 4</em></a> - episode 2163</li>
<li><a href="https://hackerpublicradio.org/eps.php?id=2184"><em>Gnu Awk - Part 5</em></a> - episode 2184</li>
<li><a href="https://hackerpublicradio.org/eps.php?id=2238"><em>Gnu Awk - Part 6</em></a> - episode 2238</li>
<li><a href="https://hackerpublicradio.org/eps.php?id=2330"><em>Gnu Awk - Part 7</em></a> - episode 2330</li>
<li><a href="https://hackerpublicradio.org/eps.php?id=2438"><em>Gnu Awk - Part 8</em></a> - episode 2438</li>
<li><a href="https://hackerpublicradio.org/eps.php?id=2476"><em>Gnu Awk - Part 9</em></a> - episode 2476</li>
<li><a href="https://hackerpublicradio.org/eps.php?id=2526"><em>Gnu Awk - Part 10</em></a> - episode 2526</li>
<li><a href="https://hackerpublicradio.org/eps.php?id=2554"><em>Gnu Awk - Part 11</em></a> - episode 2554</li>
<li><a href="https://hackerpublicradio.org/eps.php?id=2610"><em>Gnu Awk - Part 12</em></a> - episode 2610</li>
<li><a href="https://hackerpublicradio.org/eps.php?id=2804"><em>Gnu Awk - Part 13</em></a> - episode 2804</li>
<li><a href="https://hackerpublicradio.org/eps.php?id=2816"><em>Gnu Awk - Part 14</em></a> - episode 2816</li>
<li><a href="https://hackerpublicradio.org/eps.php?id=2824"><em>Gnu Awk - Part 15</em></a> - episode 2824</li>
<li><a href="https://hackerpublicradio.org/eps.php?id=2852"><em>Gnu Awk - Part 16</em></a> - episode 2852</li>
</ul></li>
</ul>
