HW2 - More Unix Shell (2 points)

Due Tuesday 10/15 at 1:00 pm. No late submissions accepted.

Submission: Gradescope

Specification: Spec


This assignment continues to practice using the bash shell and basics of combining commands using redirection and pipes. For Task 0 there is nothing to submit. For Tasks 1 and 2 you will submit your responses to Gradescope.

Task 0: Log in and prepare a directory

First, log in to a machine running Linux and launch a Terminal window as described previously in Homework 1.

We have set up a ZIP archive full of support files that you must download to your Linux machine. Download/unzip it to a directory on your system.

wget https://courses.cs.washington.edu/courses/cse391/24au/homework/hw2/hw2.zip
unzip hw2.zip

To calculate your final score on this assignment, sum the individual scores from Gradescope.

  • if your score is between [0, 1), you will get 0 points
  • if your score is between [1.0, 1.5), you will get 1 point
  • if your score is between [1.5, 2], you will get 2 points

Task 1: Basic Navigation in a Text Editor

The following are exercises and questions are meant to help you become more comfortable with a text editor that is built into the command line. You can choose either vim or emacs. While the answers to the questions themselves are relatively easy to find by simply looking them up, the real learning will come from you actually practicing these commands yourself. While we won’t be able to know whether you’ve really been practicing, this is not for our benefit, it’s for yours. We also recommend getting even more practice by writing the answers to your task1.txt and task2.sh files using this editor. 😊

For all of these questions, you will be using the text editor of your choice to practice navigating around the intro_survey.csv file in the hw2 directory.

  1. What is the command to move your cursor to the end of the file?
  2. What is the command to move your cursor back up to the beginning of the file?
  3. What is the command move to line 50 of the file? Practice moving around to different lines in the file. You may notice that emacs and vim do not show line numbers of a file by default but you can enable line numbers. While it’s not required that you look this up, you may find it helpful. - (for this quarter, the intro survey doesn’t have 50 lines. Answer as if it did; we encourage you to “test” your answer with a smaller number first, like 10)
  4. What is the command to search for the text “chocolate”?
  5. What is the command to go to the next match from your search?

Task 2: Bash shell commands

For this task you will use shell commands to process the class’ responses to the introductory survey completed last week. The results are stored in the hw2 folder in a file called intro_survey.csv. As you may notice, only four of the questions from the survey have been included: “What’s your favorite candy?”, “What’s your favorite dinner to make?”, “Cats or Dogs?” and “Are you currently enrolled in CSE 351?” One of the goals of this assignment is to show you that a few simple commands can be used to process and analyze data.

For each item below, determine a single bash shell statement that will either perform the operation(s) requested or provide the answer to a question. Each solution must be a one-line shell statement, but you may use input/output redirection operators such as >, <, and |. For all commands, do not create any files except those indicated.

To test your commands, you should have unzipped hw2.zip into the current directory. You can assume you are in the hw2 directory when doing these problems.

Write your answers in on the indicated lines in the task2.sh file in the hw2 folder.

Problem 1

Compile the Java program stored in the file ParseColumn.java.

Problem 2

The ParseColumn Java program takes a column number (1-indexed) as a command-line argument, reads a CSV file from stdin line by line and outputs the data from the specified column only. It also deals with answers that have commas in them (the tl;dr is that it mostly ignores commas in quotes). Run the Java ParseColumn program stored in ParseColumn.java to select columns from intro_survey.csv containing the answers to “What’s your favorite candy?” and write the output to a file called candies.txt.

Tip

You may use the resulting candies.txt file for later problems.

Problem 3

Display each of the responses from candies.txt that contain the text "chocolate", ignoring case. That is, all of the favorite candies that have chocolate as part of the response.

Problem 4

Display each of the responses from candies.txt that DO NOT contain the text "chocolate", ignoring case.

Info

Don’t worry about removing the header “What’s your favorite candy?” from the output.

Problem 5

Create a new file called intro_survey_no_header.csv containing the entire contents of the original intro_survey.csv file, without the header. (The header is the first line in the file containing the survey questions.) Note your command should be flexible, regardless of the specific number of lines in the intro_survey.csv file.

Read the man pages for the head and tail commands for help on how to do this.

Tip

You may use the resulting intro_survey_no_header.csv file for later problems.

Problem 6

Assuming that the intro survey lists responses in chronological order, what command could you use to find out the favorite dinner of the last person to turn in the survey?

Info

Your answer should be a command that operates on intro_survey_no_header.csv, instead of the literal last entry.

Problem 7

What command could you use to find out how many students completed the survey?

Info

The autograder expects a command that outputs a string with the format [number] intro_survey_no_header.csv. Don’t just put a number!

Problem 8

How many students in the course are not also taking CSE 351? Note that because the answers to the question “Are you currently enrolled in CSE 351?” are “Yes” and “No”, you won’t be able to simply grep intro_survey.csv for “No”, as this word may appear as part of answers to other questions.

Problem 9

How many unique answers were there to question “What’s your favorite candy?” case-insensitively? Don’t worry right now about the difference between answers like “kit kat” and “kitkat”, but your solution SHOULD correctly count “kitkat” and “KITKAT” as the same.

This time you should be careful that the header “What’s your favorite candy?” is not counted.