 I'm going to steal a page from my friend Jordy, and the tool he showed last week, 14.10, and show you my module. Let me just give me a few seconds to type this out. There we go. I cheated this week. It's not a module per se. Well, it is a module. Everything in Python is more command line tool written in Python. It's really handy. It's going to be like a UNIX bearded guy in the corner. You can do all this with AUK and base UNIX tools, and you absolutely can. The problem is I program a lot more in Python than in bash or AUK, so I never remember how to do those things. This tool lets you do it in Python. Let me show you the first example. Let's take a UNIX command. Who here has used UNIX and Linux? You're all pretty much familiar. The point of UNIX and Linux, everything is text. I did an LS-L, but this is just a block of characters of text that I then use command line tools to chop and do what I want with it. Well, there's a command line tool called pip, so I'm going to pipe my LS-L into this pip command, and then I'm going to give it a piece of Python code to execute on that text line. So here it's going to be P0. The P variable is initialized through contents of every line in a loop, right? And here, it's the line as a string, and P0, if P is a Python string, this will give me the first character of each line, and so it does, the tz, dot, dot, dash, dash, and the d. But these are straight up Python commands, right? So I can do P0 to 10, like in any Python command, and I get the first 10 characters, or because they're real Python strings that take all the methods on Python strings, I can do something a lot more complicated, like let's split on white space, give me the second element, and uppercase it. Boom. And this is exactly what you do with strings in your Python commands. You don't have to remember some awkward awk command written in 1970. This is Python 2.7, and everything works fine, right? PIP has some extensions to the language. It's built into its command. One of the handiest ones is what they call a pipe. So here I have ls-l in my shell piping the pipe, a bit complex. I open my single quote to give my PIP command, and in it, I give one command, so my split to an upper, and then inside the single quote, so this is I'm giving it to PIP as an argument, a pipe, right? And what that does is it takes whatever you did in the last command and sets it as a new value of P, so you can do something else, like, and percent P, and boom, and it does that for every line ad nauseum, right? So now the P variable is whatever was piped in, so you can build your commands piece by piece through trial and error, right? So also there's a helpful extension to the language that if you decide to return a Python list, so here I just do my split, it will show every element of the list. So the first line has two elements, zero is total and one is 400, ad nauseum, ad nauseum, ad nauseum, and because it's Python, I can split on whatever I want, right? So if I want to split it on the R, it gives me a different sequence of lists. With true trial and error, you can just type your commands bit by bit, see what works, oh, this doesn't work, erase a bit, try again. You can do filtering, so if at any point in the, so here we showed you split, so let me take the last element of each line, right? So this turns out to be for Alice dash L, mostly the file name. If at any point in the pipe, instead of returning a string, so p dot split minus one returns a string, it returns a true or a false, a Python Boolean, it acts as a filter. So if I do a split and then I pipe it into my starts with 2014, I only get the lines where it starts with 2014, so I don't get true and false, it just filters out anything that is equal to false. But however, if I re-pipe it in to something else, it takes the original value of the string or the p value and gives it to you, so you can then manipulate it as you want, as I did here. So it's not to true or false, it gets piped in as still the string as it was. And finally, this is a very short overview of pip, just to really, the fastest commands. What I'm going to show you is the very aptly titled pp command. So p was each line in a loop, the pp command is all your lines as a Python list. So it's a Python list of strings, I want element 1 to 5, and it gives me those elements, 0, 1, 2, 3, the element is 1 to 5 in my ls-l. But if I pipe that and then I use the p variable, it then loops back over each line of input as if it was. So I can do a filter to get all the ones that start with 20, right? And then a pp.sort, so then I go back to the pp, I can then sort it, right? And I can use, it's a Python sort, like the Python list supports, and I can just type in my fancy Python, and it'll then sort on the numeric value of that fourth column. And that's about it, because I'm running out of time. Thank you very much.