[comp.unix.shell] CAN AWK KEEP COUNT

vwa0201@marst2 (Larry Baca) (03/22/91)

In one portion of a script I have written (csh), I need to keep a running total
of certain fields within a record found by grep. My grep statement looks
something like this:

grep $pattern $infile | tee $outfile | cut -c49-100 | awk ......

My problem is in awk, I want to feed "awk" cols 49-100 of the greped record. 

The "cut" record consists of 5 numeric fields of 10, 12, 10, 10, and 10 cols 
in length, no spaces. 

I want awk to keep a running total for each field and spit the grand totals 
out at the end. As you can see I am also writing the entire record to $outfile.

I would also like "awk" to make the grand totals available to the rest of
the script.

I might add the file I am working with is around 900K 100 col rcds, so maybe
awk isn't the way to go.
-- 
/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
LARRY BACA,                                                       marst2!lbaca
DAASO-VWA AIS, DEFENSE AUTOMATIC ADDRESSING OFFICE, WESTERN DIVISION
DDTC TRACY, TRACY CA. 95376-5057  AUTOVON 462-9391  COMERCIAL 832-9391

]) (03/23/91)

In article <356@marst2> vwa0201@marst2 (Larry Baca) writes:
>In one portion of a script I have written (csh), I need to keep a running total
>of certain fields within a record found by grep. My grep statement looks
>something like this:
>
>grep $pattern $infile | tee $outfile | cut -c49-100 | awk ......
>
>My problem is in awk, I want to feed "awk" cols 49-100 of the greped record. 
>
>The "cut" record consists of 5 numeric fields of 10, 12, 10, 10, and 10 cols 
>in length, no spaces. 
>
>I want awk to keep a running total for each field and spit the grand totals 
>out at the end. As you can see I am also writing the entire record to $outfile.
>
>I would also like "awk" to make the grand totals available to the rest of
>the script.
>
>I might add the file I am working with is around 900K 100 col rcds, so maybe
>awk isn't the way to go.

Well, I'd be approaching it like:

-- getstuff.sh --
:
# snag pattern $1 from file $2, write it to $3, and set the totals in
# shell variables $1 through $5.

pattern="$1"
infile="$2"
outfile="$3"

# test values assigned above, then....

#
# grep's still faster as our sieve that to ask awk to filter infile...
#
set -- `grep "$pattern" "$infile" |
	awk '		{
			print > outfile
			tot[1] += substr($0, 49, 10)
			tot[2] += substr($0, 59, 12)
			tot[3] += substr($0, 71, 10)
			tot[4] += substr($0, 81, 10)
			tot[5] += substr($0, 91, 10)
			}
		END	{
			close(outfile)
			print tot[1]+0, tot[2]+0, tot[3]+0, tot[4]+0, tot[5]+0
			}' \
		outfile="$outfile" -`

for i in 1 2 3 4 5
do
	eval "echo \"Total $i: \$$i\""
done
-- getstuff.sh --

...Kris
-- 
Kristopher Stephens, | (408-746-6047) | krs@uts.amdahl.com | KC6DFS
Amdahl Corporation   |                |                    |
     [The opinions expressed above are mine, solely, and do not    ]
     [necessarily reflect the opinions or policies of Amdahl Corp. ]