NAWK Heeeeeeeeelllllllpppp Please

Hello... I am fairly new to the UNIX world and I need some help with NAWK. I have a file that I need to pull the first and last name from. My problem is that the last name is not always in $2. Several are in $3 and $4 and I can't figure out how to distinguish.

Can someone Please help me?

Thanks!
Dianna

Hi Dianna,
I am not familiar with NAWK but I do know AWK which is pretty similar. awk has a variable called NF which tells you the number of fields in record based on your field separator. For example, if you have names in the following formats:

John Q. Public
Jane Doe
Bill Bob Joe Bob Johnson

the NF will be the following for each assuming your field separatore is a space (which is default by the way):

John Q. Public NF=3
Jane Doe NF=2
Bill Bob Joe Bob Johnson NF=4

You can then use the value of NF to determine which feild to extract permitted the last name is always the last "word" on the line. Here are some examples where this wouldn't work:

Thuston Howell III <- last name is not III
Tony Van Sant <- last name is two "words"

If you are new to shell programming, a great book about awk is "sed and awk" by O'Reilly:

Good Luck,
TioTony

Thank you for your help, but now I'm stumped again! :smiley:

I need to create an output that lists and totals all of the directory files in my current directory in long format and I have to use a script file. This has to add the number of directories/files any time that I create a new directory/file. Can you help?

I don't want to plagerize so I give credit to Dale Dougherty and Arnold Robins who wrote "sed and awk" which I mentioned in my previous post (you really should buy it). It may not be exactly what you want but should be really close:

#!/bin/sh
ls -sl $* | awk'
#filesum: list files and total size in bytes
#input: long listing produced by "ls -l"

#1 output column headers
BEGIN { print "BYTES", "\t", "FILE" }

#2 test for 9 fields; files begin with "-"
NF == 9 && /^-/ {
sum += $5 # accumulate size of file
++filenum # count number of files
print $5, "\t", $9 # print size and filename
}

#3 Test for 9 fields; directory begins with "d"
NF == 9 && /^d/ {
print "<dir>", "\t", $9 #print <dir> and name>
}

#4 test for ls -lR line .dir:
$1 ~ /^\..*:$/ {
print "\t" $0 #print that line proceeded by a tab
}

#5 once all is done,
END {
#print total file size and number of files
print "Total: ", sum, "bytes (" filenum " files)"
}'

This will count the total number of files and their total combined size. I highly recommend the sed and awk book. I actually carry it in my briefcase all the time because it is just such a good reference book and awk is such a powerfull tool. It is well worth the time to learn the ins and outs of awk.

Ok, I am soooo grateful for the quick replies! And I'm going to the bookstore tomorrow for the book. Thank you for the tip!

Much love!