|
TUCOWS NETWORK |
LINUXBERG | TUCOWS | FREETHEMES | GAMINGPLACE | eBarn | PDA Central | HOME |
|
|
|
H
HOWTO
's (HOWTOs in html) plain text (HOWTOs in plain text for printing) html'd (Mini-HOWTOs) plain text (Mini-HOWTOs) LDP Additions (Latest from LDP) Other Formats (LDP Other Formats) Translations (LDP Other Languages) Unmaintained (LDP Unmaintained)
Contrib
|
11. Real Life Examples
UNIX' core idea is that there are many simple commands that can linked together via piping and redirection to accomplish even really complex tasks. Have a look at the following examples. I'll only explain the most complex ones; for the others, please study the above sections and the man pages. Problem: Solution:
Problem: I have a file containing a list of words. I want to sort it in reverse order and print it. Solution:
Problem: my data file has some repeated lines! How do I get rid of them? Solution:
Problem: I have a file called 'mypaper.txt' or 'mypaper.tex' or some such somewhere, but I don't remember where I put it. How do I find it? Solution:
Explanation: Problem: I have a text file containing the word 'entropy' in this
directory, is there anything like Solution: yes, try
Problem: somewhere I have text files containing the word 'entropy', I'd
like to know which and where they are. Under VMS I'd use Solution:
Explanation: In alternative, write the following script:
#!/bin/sh
# rgrep: recursive grep
if [ $# != 3 ]
then
echo "Usage: rgrep --switches 'pattern' 'directory'"
exit 1
fi
find $3 -name "*" -exec grep $1 $2 {} \; 2> /dev/null
Explanation: Problem: I have a data file that has two header lines, then every line has 'n' data, not necessarily equally spaced. I want the 2nd and 5th data value of each line. Shall I write a Fortran program...? Solution: nope. This is quicker:
Explanation: the command Problem: I've downloaded an FTP site's Solution:
Explanation: Problem: I've written a Fortran program, Solution: a very short script. Make your program look for the data
file '
#!/bin/sh
# myprog.sh: run the same command on many different files
# usage: myprog.sh *.dat
for file in $* # for all parameters (e.g. *.dat)
do
# append the file name to result.dat
echo -n "${file}: " >> results.dat
# copy current argument to mydata.dat, run myprog
# and append the output to results.dat
cp ${file} mydata.dat ; myprog >> results.dat
done
Problem: I want to replace `geology' with `geophysics' in all my text files. Shall I edit them all manually? Solution: nope. Write this shell script:
#!/bin/sh
# replace $1 with $2 in $*
# usage: replace "old-pattern" "new-pattern" file [file...]
OLD=$1 # first parameter of the script
NEW=$2 # second parameter
shift ; shift # discard the first 2 parameters: the next are the file names
for file in $* # for all files given as parameters
do
# replace every occurrence of OLD with NEW, save on a temporary file
sed "s/$OLD/$NEW/g" ${file} > ${file}.new
# rename the temporary file as the original file
/bin/mv ${file}.new ${file}
done
Problem: I have some data files, I don't know their length and have to remove their last but one and last but two lines. Er... manually? Solution: no, of course. Write this script:
#!/bin/sh
# prune.sh: removes n-1th and n-2th lines from files
# usage: prune.sh file [file...]
for file in $* # for every parameter
do
LINES=`wc -l $file | awk '{print $1}'` # number of lines in file
LINES=`expr $LINES - 3` # LINES = LINES - 3
head -n $LINES $file > $file.new # output first LINES lines
tail -n 1 $file >> $file.new # append last line
done
I hope these examples whetted your appetite...
|
_________________________________
Last Edited: Thursday, January 21, 1999 03:11 PM
Maintainer: Rob Kennedy (rob@linuxberg.com)
Site Design - Graphicjam Digital
Arts Inc. 1999.
® 1999 TUCOWS Interactive Ltd. All rights
reserved