Skip to content

Exercise: Scavenger hunt

Kenny Yu edited this page Sep 25, 2013 · 15 revisions

Getting the code

In a terminal, execute these commands:

git clone git://github.com/hcs/bootcamp-setup.git
cd bootcamp-setup

Scavenger Hunt: Part 1

Inside the bootcamp-setup directory, you should see an exercise-simple directory. Enter

cd exercise-simple

and you should see a file called data.txt. Now answer the following questions by writing a sequence of commands to do the work for you. Save your answers in a file called answers.txt in this directory.

  1. How many lines are in the file? (Hint: use cat to dump the contents of the file, and look at the man page for wc to see how to count the number of lines in a file.) SOLUTION cat file.txt | wc -l

  2. How many times does Kenny appear in the file? (Hint: use grep "NAME" to print out the lines that contain NAME). SOLUTION cat file.txt | grep "Kenny" | wc -l

  3. How many times does Kenny OR Karen appear in the file (Hint: use grep "pattern1\|pattern2" to print out the lines that contain pattern1 OR pattern2. SOLUTION cat file.txt | grep "Kenny\|Karen" | wc -l

  4. For the next few questions, you may find this information useful. If you feed in input (either using < or by piping input using |) to the expression awk '{print $2}', this will print out the second column of the input. To print out the a different column, change $2 to be the column number you want (e.g. to print out the first column replace $2 with $1). Print out the third column of data.txt. SOLUTION `cat data.txt | awk '{print $3}'

  5. Print out the third column of data.txt, capitalize all the letters, and save it to a file named pokemon.txt. SOLUTION cat data.txt | awk '{print $3}' | tr '[:lower:]' '[:upper:]' > pokemon.txt

  6. Print out the contents of pokemon.txt in sorted order. (Hint: look at the man page for the sort command). SOLUTION cat pokemon.txt | sort

  7. You give Goldduck a water stone and it evolves into Psyduck! Replace all instances of GOLDDUCK with PSYDYCK from pokemon.txt, and save the output in pokemon_evolved.txt. (Hint: sed s/old/new/g will replace all instances of old with new). SOLUTION cat pokemon.txt | sed s/GOLDDUCK/PSYDUCK/g > pokemon_evolved.txt

  8. How many distinct pokemon are there in pokemon.txt? (Hint: there is a very useful option you can pass to the sort command. SOLUTION cat pokemon.txt | sort -u | wc -l

  9. For the next few questions, you may find this useful: If you feed in a file with one number on each line to this command: python -c "import sys; print sum(int(s) for s in sys.stdin.readlines()[0].split())", this will sum all the numbers. Sum all the numbers in the second column of data.txt. SOLUTION cat data.txt | awk '{print $2}' | python -c "import sys; print sum(int(line) for line in sys.stdin)"

  10. Sum all the numbers in the second column of data.txt for any line containing Kenny OR Karen. SOLUTION cat data.txt | grep "Kenny\|Karen" | awk '{print $2}' | python -c "import sys; print sum(int(line) for line in sys.stdin)"

  11. curl LINK is a command that can download the html of a webpage. How many times does the word "google" appear in the html of www.google.com? (Hint: use the --only-matching option on grep PATTERN to only print the parts of the text that match PATTERN). SOLUTION curl --silent www.google.com | grep google --only-matching | wc -l

  12. How long is the word in word.txt? SOLUTION cat word.txt | wc -c

  13. There is file called mystery.sh in the directory. Give it executable permissions, and run it. What is the output of the program? (Hint: to run a program prog.sh in the current directory, you need to prefix it with ./, e.g. ./prog.sh). SOLUTION chmod +x mystery.sh; ./mystery.sh

Scavenger Hunt: Part 2

In the exercise-simple directory, you should find a directory called os161. This directory is the source code for the operating system you will become very familiar with if you decide to take CS161: Operating Systems (which you all should)! Go into this directory:

cd os161
  1. How many files are there in the os161 directory, including all subdirectories? (Hint: find DIRECTORY will list ALL the files in the directory, including subdirectories). Note that . refers to the current directory, and .. refers to the parent directory. SOLUTION find . | wc -l

  2. Where is the file errno.h in the os161/kern directory? (Hint: find DIRECTORY -name FILE will attempt to find FILE somewhere in the directory hierarchy rooted at DIRECTORY). SOLUTION find kern -name "errno.h"

  3. How many different values of errno are there in this file? SOLUTION cat ./kern/include/kern/errno.h | grep "#define E" | wc -l

  4. Find all occurrences (all files and line numbers) of the string STACK_SIZE in any file (including subdirectories) in the os161 directory. (Hint: Use grep. Look at the man page for grep, and look for the words recursive and number). SOLUTION grep -r -n "STACK_SIZE" .

  5. How big is STACK_SIZE? SOLUTION grep -r -n "#define STACK_SIZE" .

  6. What is the numeric value of EFAULT? What does it mean to get an EFAULT? (look at the associated comment) SOLUTION grep -r -n "#define EFAULT" .

Finish the rest of bootcamp

Go back to the main page.