Awk
Tips and Tricks
--------------------------------------------------------------------------------------------------------------
Finding
the length of a line.
A
colleague needed to find the length of a particular line in a file.
He discovered that using 'wc' gave the wrong result (as in "head -2
filename | tail -1 | wc -c"). Here's what he came up with instead. Note
the parentheses...
cat
filename | awk '{ if (
NR == 2 ) {print length($0); exit; } } '
--------------------------------------------------------------------------------------------------------------
Sizing
a directory.
This uses
Awk's ability to do arithmetic across multiple input lines to
produce a count, total and average file size for a directory or a
supplied pattern. It's a usefull tool for quick 'n' dirty system
admin...
echo
"Harvey's file counter
and sizer"
echo
"-------------------------------"
if
[[ -z $1 ]]
then
echo "Sizing
entire directory"
else
echo "Sizing
files for pattern [$1]"
fi
ls
-l >/tmp/fsz.$$_1
#
-------------------------------
#
Remove any directory
entries...
#
-------------------------------
grep
-v ^total
/tmp/fsz.$$_1 | grep -v ^d >/tmp/fsz.$$
rm
/tmp/fsz.$$_1
#
------------------------
#
Set up the search job...
#
------------------------
if
[[ -z $1 ]]
then
cat
/tmp/fsz.$$
| awk '{s += $5}; END
{printf
"\nThere are %d files matching pattern\nAverage size is %f\nTotal size
is %f\n", NR, s/NR, s}'
else
grep $1
/tmp/fsz.$$ | awk '{s += $5}; END {printf
"\nThere are %d files matching pattern\nAverage size is %f\nTotal size
is %f\n", NR, s/NR, s}'
fi
rm
/tmp/fsz.$$
--------------------------------------------------------------------------------------------------------------
Don't
use awk - use nawk!
I couldn't
work out why this wouldn't work when I ran it using awk (as
it worked fine on another machine). It turned out that it would perform
admirably if I ran it using nawk instead. It's worth trying this out on
your own machine and seeing what happens...
nawk
'{
if(substr($0,405,2)=="LS") print $0 }' sourcefile.dat | head
-10000 > targetfile.dat
--------------------------------------------------------------------------------------------------------------
Learn more by searching Google here...
|