 I believe you can answer your own data analysis questions. Do you? You should. Stick around for another episode of Code Club. I'm your host, Pat Schloss, and it's my goal to help you grow in confidence to ask and answer questions about the world around us using data. In the last episode, we used sed to write regular expressions that allowed us to parse file names and paths to make our bash scripts a little easier to use. We also tweaked our make file to take advantage of those changes by using some of make's automatic variables. Now, sed is a powerful tool for writing bash scripts and working with file names, but that episode was really a bit of a setup for today's episode. Today, I want to build some logic into our scripts. Right now, we have full-length 16S RNA gene sequences. Those sequences were extracted from full genome sequences. Sure, there are sequencing platforms that will generate those full-length 16S RNA gene sequences for us. However, the Illumina MySeq platform is far more commonly used to generate sequences that are much shorter fragments of the gene. If I want to look at how Amplicon Sequence Variants, or ASVs, perform using current sequencing approaches, then I need to extract more commonly used regions from the gene. We'll also look at full-length sequences, but I need to build some logic into a new script that will extract the coordinates of my alignment that correspond to the regions of interest. This will allow us to simulate creating ASVs for different subregions of the 16S RNA gene. In today's Code Club, we're going to use if-else statements in Bash to insert this type of logic into our scripts. We'll also see how we can use if-else statements to make sure that everything has been going swimmingly with their previous commands. Even if you aren't analyzing 16S RNA gene sequences or haven't forbid even interest in microbiology, I'm sure you'll get a lot out of today's video. Please take the time to follow along on your own computer and attempt the exercises. Don't worry if you're not sure how to solve them. At the end of the video, I'll provide solutions. If you haven't been following along but would like to, welcome. Be sure to subscribe to the channel and click on the bell icon so you know when the next episode is released. Feel free to leave a comment, even if it's just to say hi. Please check out the blog post that accompanies this video where you'll find instructions on catching up, reference notes, and links to supplemental material. The link to the blog post for today's video is below in the notes. I've already created an issue for today's episode. This is issue 12 within my repository. For today's episode, the issue that we're going to work on is going to extract the subregion out of our full-length 16S RNA gene sequences and to create simulated data sets, if you will, for different regions. The most commonly used ones for using aluminum isyx sequencing might be V4, which is about 250 nucleotides. The V3, V4 region, or the V4, V5 region. And of course, there's also the full-length. And again, what we're trying to do is simulate sequencing this part of the 16S gene from a community. And the community that we're using is kind of the collection of full genome sequences that are available and the 16S sequences that come from them as curated by the RNDB. So we're using this as our simulated test case because we know which copies of the gene go with each other. If you're just sequencing bulk DNA from a sample, you don't know which 16S sequences go together as part of the genome. And again, if you did know that, then this whole problem would be moot. But again, that's kind of what we're trying to test here. So this issue I've gone in and we wanna create a code extractregions.sh. And it's gonna take in the output file name, which we talked about doing last week. And you'll see that we're gonna create new directories for each of the subregions. So it'll be data V19, data V4, data V34, data 45. And the output of this will be a file called RNDB.align. We'll use mother's pcr.seqs function and also filter.seqs because there's a lot of extra padding in these files. It makes them quite large. We'll remove that vertical padding to make the data sets a little bit more tidy. We'll also wanna add some garbage collections, so to speak, which basically removes all those extra files that we don't really need from the mother functions. The pcr.seqs function will generate a file ending in bad.acnose. And these are the names of the sequences that didn't fully overlap the region we're interested in. And so I'm not sure that anything's gonna be generated in those files, but what we'd like to do is to put that information into a file called RNDB.badacnose in the directory for that subregion. And finally, we wanna, of course, create a rule in our make file that allows us to run this and build, run this file, the script, for any of the subregions we might possibly give it. All right, so this is our marching orders, if you will. And I will come to my directory. You can see we're in the project route of our directory. I'll go ahead and fire up Adam. So I'll go ahead and make a rule for doing this for the full length v19. And hopefully we'll see patterns there that we can then generalize to the other regions as well. So we're gonna create data forward slash v19 forward slash rrndb.align. And this is going to be dependent on code forward slash extract region. Make sure I've got the name right extract region. I guess it doesn't matter, it is what I use. So we'll use the script as a dependency. We'll also use this file, our alignment file as a prerequisite. And that's good. And then the recipe will be to run code forward slash that, the name of our script, space, and then we're gonna give it this. And so as we talked about last time, we can use this automatic variable, the dollar sign at variable. We'll save that. And that will allow us to build the rule. So if we test this out, if I do make my fingers on the right keys, make that it says no rule to make target code extract region SH. So we need to start there. We need to create our code extract region file. So we'll do new file, code forward slash extract region.sh. And we're gonna go ahead and put in our shebang line. User bin environment. I forget these sometimes so I can always go back and really copy the shebang line for my other files if I forget, but I had it mostly right. We'll wanna put in some comments here. So I'll say, what was the structure I used here? I'll just go ahead and copy that. Like to try to keep things consistent. So the input will be, actually I picked a good one. The input will be, it's not really an input. That's more of a dependency, right? That's a dependency. And the output, the input really is going to be the target name, which is really the output. And that will be, let's see, data region and then rndb.align, okay? And I'll leave some space to write notes later. Okay, so the first thing that we'll get in is our target. So $target equals $1. And I wanna extract the path and the region. So the region, as we talked about in the exercise from last episode, we'll do echo $target. And then to be safe, I'll wrap that in double quotes. In case, again, there might be spaces in the name. I can't imagine doing that, but who knows where this script may wind up. Then we will do said-e double quotes and then s. And then we need the three forward slashes. So to get the region, we will then do .star backslash forward slash. So that .star is really gonna represent data. Again, we could write data, but to be general and to practice using these fancy regular expressions, I'll put in the .star. We'll have the .star for the region and then forward backslash and then the rest of it for the path. And I'm going to save, if you will, this middle part, which will represent the region. And then my path, I will copy that down and I'll then capture the full thing to get the path. So I will test this with say echo target equals $target echo region $region echo path $path. And I'll come back to my make file, run this, and then I see permission denied. Hopefully you remember what that means. That means that I forgot to change it to be an executable, to change my extract region script to be executable. Do you remember how we do that? We can do that with chmod plus x code forward slash extract region .sh. Now let's try to run make again. Everything looks good. This is the target name. It got the region correct. And then the path for data v19. I noticed it doesn't have the forward slash at the end. I'd like to have that there. So I will go ahead and I'll put a back forward slash inside that replacement pattern, save it, run again. And now I have data v19 forward slash. So we're in great shape. One of the commands in mother that we can use summary.seqs will tell us something about the distribution of lengths and start and end positions in the alignment. So I'll go ahead and run that right now, code mother mother. And we can run mother from the command line by wrapping the commands in double quotes and starting it with a pound sign. And we saw this previously when we ran align.seqs in that shell script. So we will do summary.seqs, forward parentheses, and then I'll do fasta equals the name of the file, which is data raw forward slash RNDB hyphen 5.6 underscore 16S underscore R RNA dot align. I think that's right. Again, I'm not gonna put this into a rule necessarily. I don't really care to save the output. It's more for me to understand what we're doing here in the analysis. So what we see in this output from running summary.seqs is the start position, the end, and the number of bases for each of our sequences. And so we see that our sequences, for the most part, start at position 1044. There's a few sequences that perhaps start after that position. And then they end most of them at 43116. And those correspond to full length sequences, but there's a few that end shorter than that. So our full length coordinates, if we took a full length, say E coli sequence and aligned it to the reference alignment, it would start at 1044 and end at 43116. And so if you recall from our issue, we see that V19 goes between those two coordinates. And if we look at these other regions, we'll see that they are all contained within the sequence data that we have. The earliest region, the V34 starts at 6428. And so 6428 is later than the, I'm gonna say the slowest sequence to start, but the sequence that starts last. And the earliest sequence end is at 32825. And all of our other regions besides the full length end before that. So we'll be in good shape, but we would expect some bad accession names for those full length sequences. So we're gonna use a similar mother command in our bash script, which will extract the region we're interested in using a function called PCR.seqs. And then we'll use the mother filter.seqs command, which will return, will remove any position in the alignment where every sequence has a gap character. Those are for padding and don't contain any real data. So do mother, code mother, mother, and we will then do PCR.seqs, FASTA equals, and actually gonna use this FASTA file. So instead of having to type this all out, I'll put that in. That's again, one of our dependencies from the make rule. We will then do start equals 1044 and equals 43116. This is again for full length sequences. And I want the output directory, which is a argument for mother and all of mother's functions to be my path. So I'll do dollar sign path. Yeah. So that will again extract the region we want. And so then we want to do filter.seqs, vertical equals true. And that should work. So we'll run this and see how far we get. For right now, I noticed that everything else looks good. Maybe something I'll do to kind of set up where we're going would be to create a variable called start. And I'll say that's 1044 and end equals 43116. And I'll replace this 1044 with a dollar sign start and this 43116 with a dollar sign end. And I'll return to our make file and I'll rerun this rule and see where the output brings us. This might take a few minutes. So I might kind of do some editing and jump ahead. So we see the final file is this data v19. So it put it in the correct directory, this root of the file. And then we've got instead of a line, we now have PCR from PCR seeks and then filter from filter seeks and ends in fast day. What we want to do is change this into rndb.align. We can do this with the mv function, use mv, which moves files and also renames it. You're basically moving it in the same place. So we'll move that file to dollar sign target, right? So we're gonna move it from data v19, this long thing to data v19 rndb.align, which again is the same as our target. And this data v19 is our path. And now I'm seeing that maybe I don't want that final forward slash, so I'll go ahead and take that out because if path has a forward slash, then it's gonna be forward slash forward slash and we don't wanna mess with that. So I'll go ahead and take that out. Again, everything's a work in progress. So that would then change the location of the file, change the name of the file. Up here from the output of pcr.seqs, let's look at what other files were made. I'm gonna go ahead and copy these into my script because if they're not needed, then I'm gonna delete them. And there was also this filter file that I'll also copy into my script. And let's see, so it's this one, this bad Acnos that I'll copy up here. And so we'll move that and we will then do what? Dollar sign path and we will move that to rndb.bad.acnos. Very good. And we'll want that probably to also be a output or a potential target, if you will, in our make rule. And if I return to my make file, I can add that here and then instead of a line, we could do bad.acnos. And because I've kind of got this running off the screen, I'll go ahead and put a line break in there. Again, using the forward slash to indicate that it's the end of the line break. That will be good. And I then wanna get rid of these other files and I can do that with RM. Now the risk of removing the files is that we might end up needing them down the road, but I feel pretty confident that we're not actually gonna need these. So I'll go ahead and clean these up with dollar sign path. Save that and that should be good. So I'm gonna go ahead and rerun this quickly and show you what the output looks like. Again, I'll do the make. Great, so it finished running. I'll do ls-lth data and data v19. And I see in my v19, I only have the align and the bad.acnos, everything else got thrown away. Now, this works great for v19, but as we've mentioned, we wanna look at these other variable regions as well. So perhaps I wanna look at v4 or 3v4, v4, v5. So we need to build that logic in here. So we have one script that can process any region we want. To do this, what we're going to need is to use what's called an if-else statement. And the if-else statement we can write using if and then a space and then pairs of square brackets like this. And here goes a logical question. And then we say then and then we do stuff. And then we finish the if-else statement with a fi. Kind of the opposite, if you will, of if. And what we'll say is if region, sorry, dollar sign region equals, and then quote v19, then echo region, dollar sign region, okay. And because we're gonna do some testing, I'm gonna go ahead and comment out the rest of these lines. And Adam, I can do that with the command forward slash to comment those out just so I'm not re-running mother, these kind of time-intensive things over and over again as we figure out the logic that we wanna use for setting our different alignment coordinates. And you know what, I'm gonna also go ahead in here and put in my start and end coordinates and I will put the region and then out here, I'm gonna put echo, start, start, echo, end, dollar sign end, that should be good. I'm gonna go ahead and get rid of these other echoes for now to kind of clean up the output and we'll rerun make on that. And we see the region is v19, the start position is 1044 and the end is 43116. Now, the spaces in here matter. I've found that if I say remove the space between the if and the bracket, that it complains, that it thinks that whole thing is a command that says command not found. Other times, you know, if you put your text right up against those square brackets, save and run that, it again thinks that v19, the bracket bracket v19 is a command, it's not, and then it doesn't know what to do. So give yourself spaces between your square brackets and what's inside and between your if and the square bracket. So this works great for v19. But we want other things, right? Like v4. So to add another statement, we can then add lif. So lif and you can see for whatever reason, Adam went ahead and helped me to flesh in what was going on. Sometimes that can be a little bit disconcerting that it knows exactly what I'm trying to do. I could then say, quote, dollar sign region equals, let's do v4. Then we want to set start equals something and equals something and we'll say echo region, dollar sign region, and I'm gonna go back to my issue to get the v4 coordinates, 13, 8, 6, 2, 2, 2, 3, 4, 4, 4. I'm gonna copy those because I can't remember that many numbers. All right. So now what I'll do is I'll try to build the v4 file. No rule, right? So we didn't put a rule into our make file to build v4. So I'm gonna copy this down and instead of v9, I'll put v4 and v19, v4. We should be in good shape now. Make that and we get region v4, start 13, 8, 16, 62, and 2, 3, 4, 4, 4. I'm gonna leave the two other regions, 3, 4, and 4, 5, for you all to work on in the exercises. But there's one last part of an if-else statement that I want to talk about is that it's always a good practice to have a final statement that is else. And so if it does if, and let's say we have, we gave it region 3, 4 right now. Well, region is not equal to v19, so it goes to the if. Region is not equal to v4. So then it would basically go all the way through and start and end would never be assigned. So what you would like to do in this else is either give a default value for start and end or to basically bomb out. And what I'm gonna do is say echo, fail, and all caps to get the tension. We don't, we don't spell very well. We don't have the coordinates for dollar sign region. If we run this, then it's gonna still keep going through. It's gonna output that line. But, and let me see what this looks like. So let's go ahead and put in a rule in our make file for region 3, 4, save that. And then we'll try making data v3, 4. And so it, as you see, it says we don't have the coordinates for v3, 4, but it then still goes to the following lines with the start and end coordinates. So what we want it to do is we want it to exit and we'll do exit one. And what that means is leave the script and return the value one. And now if I run it, you'll see we don't have the coordinates for v3, 4, and make is complaining because the rule failed on running make. This failure, though, raises an interesting question. If we look at our script, when we get into running mother, how do we know whether or not mother ran, right? Well, we could look at the output, but that's manual, it's not very automated. We perhaps wouldn't want to have to run these following steps if mother failed. So built into bash are its own automatic variables. We can do echo, dollar sign, question mark. And this tells you, gives you a code number that indicates whether or not the previous command was successful. Here we see a two. So if it's a zero, then it was successful. If I do LS and then echo, dollar sign, question mark, I get a zero, so that's successful. Maybe what we could do is we could add some logic into here now to say if this was successful, then we're going to go forward. And if it's not successful, then again, we want to bail out of running mother and we might want to send back some message indicating that it failed. What we can then do like we did earlier was with if our square brackets, then LF and then Fi to close out that. And what we're going to want to do is dollar sign, question mark. And you can use equals zero. That equal sign actually compares strings. So in this case, it'd be trying to compare a string which is numeric to the string which is zero, which is also generally numeric and probably not the best way. So what we can do is say hyphen EQ. So if we wanted them to equal, we could use EQ, not equal, we use NE, greater than is GT, less than is LT. If you look at the blog post that accompanies this video, I have a cheat sheet with a bunch of different commands that you can put in here for making these types of comparisons. I'm going to do EQ. So if it was successful, then I want to touch those files that came out of PCR seeks because what I'm concerned about is this running and they're not being a bad ACNOS file to then convert into being bad ACNOS. Also the scrap.PCR won't be generated if there's nothing that, you know, for like the V4, I suspect this won't be generated because all of our sequences will span the coordinates that we give it. It will be created for V19 as we've seen because not all the sequences span those coordinates. What I want to do is I want to go ahead and touch these two files if mother was successful so that they, they're empty, but they exist. And I'm not going to get an error when I, when I try to rename them or move them. So we'll do that. And then if it doesn't, if it's not successful, then what I'm going to say is echo, fail, mother ran into a problem. And then again, we'll do exit one. Everything that we just did here after the mother line checks to make sure that mother executed successfully. So I'll put in a comment here. So if mother executed successfully, then touch the files that might not have been generated in PCR.seqs because the sequences spanned the desired region. Regions coordinates. So that's that. I'm going to put in a comment here for some garbage collection. And here we're going to clean up the file names. I'm not sure why it's not graying this out like it's a comment. Trust that it's a comment. We'll get an error message if it's not. And I'll go ahead and remove this. And we're in pretty good shape. One other thing that occurs to me in this is that we're assuming that mother can generate the v19 or v4 directories. It appears that mother is doing that automatically for us when we use output dir equals dollar sign path. I'm going to force the issue just to be safe. And again, we've seen before to make directories. We could do mkdir and then dollar sign path. But if that path already exists, we're going to get an error message or a warning message. And what we can do is hyphen p to force it to create that directory. And if it already exists, then we won't get a warning message. It'll be cool. And if it doesn't exist, it'll go ahead and create that directory. So I'll save that. And we can then do make data v19 align dot, I'm sorry, rndb dot align. And I can run that. See you in a minute. So I ran it and it's complaining that on line 37 and 38, there's a syntax error near then. So I'm going to go look at that in here. Ah, and I told you about this, right? I had, I forgot to put a space after the zero. So I'll save that, I'll rerun it and we'll check back in another minute. And I seem to have another error on line 44 syntax error near unexpected token fi. I see fi, I'm not sure what that means, but I look up and I think for sure, it's probably, I had an L if and it was expecting some type of command. So let me replace that with else. Again, this is the challenges of copying and pasting or kind of thinking too quickly. So, and things take a few iterations to get right. Finally, it ran through without any errors. I'll go ahead and do LS LTH data v19 and looks like everything was just updated. I have those two files were in good shape. I'll run make-n on that target again, double check. Everything's up to date, we're in good shape. I'll go ahead and do make v4, data v4 as our task, right? So if this works, then that means the logic we added for v4 is in good shape. And again, I'm leaving three four and four five for you to work on as one of the exercises. Again, that ran. I'll again do add the hyphen n to make sure everything is up to date. LS LTH, data v4, everything looks good there. Something I do notice is that R and D, B, bad ACNOS has zero bytes. There's nothing in it as we expected. One final thing I wanna say about our make file is that as you can see, for each different region that we're creating, we're creating a separate rule. And by the time the exercises are done, there'll be another rule for four or five. We can use a percent sign to represent a common pattern that's being used. So by replacing the region with a percent sign, and again by using the automatic variable, the dollar sign at, then we will take this, whatever this is and match it there. So when I do make data v6, say, then there will be a rule here to do v6. And then I don't need all these extra rules. So again, this is another way to keep our data dry. We're at the end of this issue and I'm not ready to close it, but it reminds me that I never created a branch for the issue. So if I look at get status, I've modified these two files. So I'm gonna go ahead and create that branch now and our changes will carry over to that new branch. So I'll do get branch issue 12 and then get checkout issue 12 and get status. We still have those files. So we're on this branch, as you can see issue 12 and all our changes are there. So we're keeping our branches alive. Again, it's not the end of the world if we're not working on branches, but it's a nice organizational way to be looking at, to keep track of our work. As always, I have three exercises for you to work on now. First, we included the rules and logic to output the alignment file for the full length sequences and for the v4 region just now. And as I've mentioned, I'm leaving the logic to you to extract the v3, v4 and the v4, v5 regions. The start coordinates for those are in the issue tracker. And hey, if you have ideas on other regions you'd like us to include, go ahead and put that on my issue or leave that in the comments below. That'd be great. And we could come back and update that. Then I want you to update the code and close issue 12. For the second exercise, you may recall that way back when when we were downloading files with WGet and on zip that we used touch because the timestamp on the things extracted from our zip files corresponded to the old timestamp. And that causes problems with make because the output file is always going to be older than the script that was used to generate it. And so it'll always try to redownload it. And so our solution at the time was to touch the file that was extracted. What I'd like you to do is to create an issue and then use GitHub flow as we've been doing to go ahead and only touch that file if the extraction was successful. So if the extraction wasn't successful currently we go ahead and create that file, which is empty and that can cause all sorts of problems down the road. So go ahead, create an issue and only touch the output file from that extraction from using unzip if the unzip was successful. In the third exercise, I've noticed that we forgot to create a rule for installing mother. So we installed mother using code install mother.sh and we put mother into the code mother directory. Go ahead and create a rule and make and something you'll also recall from that installation script is that we use a touch there as well. So go ahead and make sure that that's only gets touched if the extraction is successful and also then update our other rules for where we use mother to include mother as a prerequisite. For the first exercise, we wanna add the logic for V34 and V45. And again, we of course then wanna generate those. So I'm gonna copy this block down and we wanna put in 34 and 45 and I'm gonna replace the start. Oh, not that one, this one. So the end is gonna be 2344 and the start there is gonna be 13862 because the end of 34 is the end of four and the start of 45 is the start of V4. If I come back to my issue tracker, V34 starts at 6428. So I will put 6428 there and the end of 45 is at 27659 and that should do it. So that's a pretty simple change. And again, looking at our make file because we put in that percent sign to match that pattern. Now if we do data V45 R&DB align, it should run. So let's give that a check. So make data V45 RRNDB dot align. That seems to have run without any error messages. I'll go ahead and do make dash N on that target again tells me it's up to date. LSLTH data V45 to make sure everything's there. We're good to go. And again, as we expect, the bad ACNOS file is empty. And we'll go ahead and make 34. I'm gonna talk to you in a couple of minutes. That seems to have worked great. Again, we'll double check with make dash N up to date. Look at the contents of the directory. Everything looks good there as well. Get status. We've modified our make file and we've created that new script code extract region.sh. I'll do get add make file code extract regions.sh. Get commit dash M extract variable regions from aligned sequences closes number 12. And I'll do get checkout master and we'll do get merge issue 12, get push. And our issue has closed. So I've created an issue 13 for exercise two, where again, we only want to touch the output of unzipping if the unzipping was successful. I'll again do get branch issue 13 to 13. And I will open up my get rndb files.sh. And again, what we want to do is we want to check if this last command was successful, then we want to touch the target. So again, that is stored in that dollar sign question mark variable. So we'll do kind of like we did before. If square brackets, dollar sign question mark, hyphen EQ zero, make sure we've got that space, then touch the target else, and then we'll close it with that. And otherwise, so if it's not successful, we'll say echo, fail. We're not able to successfully extract dollar sign file name and that should do it again. So if this, if it's successful, dollar sign question mark will equal zero, we'll then touch the target. If it's not successful, say like something happened and the download, the download got kind of aborted, then unzip isn't going to work. So then we'll get a fail that it wasn't able to successfully extract the file name. I can then do make data forward slash raw rndb file rndb 5.6.tsv, not retrieving archive, everything was good. Okay, so that looks great. Get status, we did modify that one file. So we'll do get add code, get rndb files, get commit dash m, and we will then say touch extracted files only if unzip is successful, closes number 13, get checkout master, get merge issue 13. So I'm waiting to rerun everything because changing those scripts unfortunately or fortunately, I think it's very cautious, will then trigger everything else to get rebuilt. The other thing that causes everything to get rebuilt is when we merge issues back into master. And so what I'm gonna try to do going forward is only run the scripts after you've merged the issue back into master. Because when we do this merge, what you're seeing here is output that this file is getting updated. And so then this file is going to be newer than the file we downloaded. If I look at this script, it was created at 10.06 and my data raw rndb files, I think it was the TSV file was created at 10.05. So because we did that merge, our script is now newer than our TSV file. So we'll need to rerun this after we've done the merge and that's kind of a hangup with using version control and using GitHub flow with everything. But that's a much more cautious and it is a better way to go. And again, we've committed it, we're ready to push it and we see we've closed the issue. For the third exercise, I've made a new issue, issue 14 to create a rule to install mother and then to use mother as a dependency in those rules that use mother. I'll now create a new branch and we'll go back to Adam and I'm not interested in this. I'll go to my install mother script. And again, if it's been successful and I'm probably going to copy the code straight over from here and put that in there, we are not able to successfully install mother. Okay, so if that's successful, then we don't want to touch the target. We want to touch code forward slash mother, forward slash mother and otherwise fail, we weren't just able to successfully install mother, that looks good. And we need to add a rule to our make file to install code forward slash mother. Mother and the dependency is code install mother.sh and the recipe is to run this. I'll go ahead and make the target, double-check that it works, everything is good. And now we need to update our rules that use mother to include it as a prerequisite. So I'm going to copy that and we used it in two places. So down here, where we generated the align file and then down here where we extracted the region for the stuff we did today already. All right, so we're ready to update these. So we'll do get add make file and code install mother.sh. And then I will say create rule to install mother and use as prerec closes number 14, get checkout master. Okay, get merge issue 14 and get push. One of the great things about what we've been doing with make is that I can now run the rule to generate these R&D be aligned files. And if it needs a prerequisite from earlier, it'll go ahead and automatically generate that. And I don't have to worry about running these rules individually. So I can do make data v4 forward slash R&D be dot align. Then I'll do that. So I'm gonna go ahead and run for the v19, v4, 3, 4 and 4, 5 and I'll catch you next time in the next episode. Thanks again for joining me for this week's episode of Code Club. Be sure that you spend time going through the exercises on your own to help reinforce your new skills using if else statements. You'll find if else statements in any programming language. Once you get the hand of how to use them in one language, they're easy to master in the others. It would be great if you could take the ideas we've worked through today and think about how they relate to your current projects. Do you ever find yourself saying, if this happens, then I want this something else to happen, that's a perfect spot for an if else statement. I'd love to see how you're adapting what I have covered in this and other Code Club episodes into your own work. Also, feel free to ask any questions you have in the comments below and I'll do my best to answer them in a future Code Club. Please be sure to tell your friends about Code Club and to like this video, subscribe to this Riffimona's channel and click on the bell so you know when the next Code Club video drops. Keep practicing and we'll see you next time for another episode of Code Club.