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. ]