I love shell scripts. If I have something simple to write that a normal person would try to do in a scripting language like Perl or Python, I try to do it with bash. And, as much as possible, I try to avoid using fancy stuff like variables, sed, or awk.

I didn't succeed in the latter goal this time, but I did succeed in implementing Instant Runoff Voting as a bash script. It takes as input a file called irv.txt, which lists each ballot (ranked set of choices) on a separate line as a comma-delimited ordered list.

Here's a sample input file, and here's the script itself. It could be much simpler and probably cleaner, but I tried to make it clear what was going on at each step (and demonstrate the power of piped commands).