Word Count, or "wc"
A helpful UNIX command is the "word count" program that can count how many
words are in the file.
wc -w <filename> counts the number of words in
wc -l <filename> counts lines
in a file.
Grab Regular Expression, or "grep"
Another helpful command is "grep" for grabbing lines from a file that contain
a specific string pattern, or regular expression. The
command grep <string> <files>
looks through a list of files and finds lines that contain
the specific word in the string argument.
grep pvm_pack *.cpp will look for occurrences of the string
"pvm_pack" in all files ending in ".cpp".
grep "My name is"   * will look in all files in a
directory trying to find the string "My name is".
Input / Output Redirection
The UNIX operating system has a number of useful tools for allowing other
programs to work with one another. One of the ways to handle screen input
and output with I/O Redirection, and ways to link several
programs together with "pipes".
With the use of the > for
sending output to a file, a user can easily covert from screen display
programs to ones that save the output without major changes in rewriting
code. It is also very convenien for grabbing the output from various
UNIX commands, too.
myprogram > myoutfile
This takes the output of
"myprogram" and sends it a file called "myoutfile".
ls -alF > filelist
This runs the command "ls",
but saves the directory listing to a file rather than displaying it on the
In order to convert a program that originally required lots of
user input into one that runs on its own, the input redirection symbol
< can be used to say where to get the values.
program2 < myinput
This runs "program2" but
takes any keyboard input from the file "myinput". It is important the
input values are in the proper sequence in the file "myinput" since there
will not be ways to reply to prompts at the console.
The vertical bar "|" is called the pipe symbol, and it is
designed for linking commands together to make them more powerful.
The way it works is that the output from one command is sent as
input to the next, thus creating a new command.
ls -alF | grep ".cpp"
This will list all files in a
directory, and will then grab the names of only the ones that contain
the string ".cpp" in the name, or the C++ source files.
The system() command in C
The system() command is actually a C function that is very
valuable for accessing UNIX commands from within a C program.
It can also be used to run other programs
you have already written. Be careful with extensive use of this command
because according to the online manual pages (man), there are
a few bugs such as not being able to break out of infinite loops
because interrupts are not processed, and some other
security issues. For many of the things we will be doing in this
class, though, this command will be quite useful.
system( "ls - alF");
This will run the "ls" command from
within a C program and display the results to the screen.
system ( "ps -aux | grep dhyatt > outfile");
This will run the
"ps" command, the will send that output to "grep" which will look for
occurrences of "dhyatt", and finally will print the results to a file
called "outfile" rather than displaying anything on the screen.