Alexander Dalloz wrote: > Am 03.12.2010 22:27, schrieb m.roth at 5-cent.us: >> Robert Heller wrote: >>> At Fri, 3 Dec 2010 12:57:59 -0800 (PST) CentOS mailing list >>> <centos at centos.org> wrote: >>>> >>>> I have the need to know how many connection the server has, i run this >>>> command but i don't know how to sum all the results and get a final >>>> number. any ideas? >>>> >>>> netstat -an | grep -E 'tcp|udp' | awk '{print $6}' | sort | uniq -c | >>>> sort -n <snip> >>> <the above script> | awk '{print $1;}' | tr '\n' '+'|sed 's/\+$//g'|bc >>> >>> The awk prints just the number, the tr replaces the newlines with +'s, >>> the sed strips off the trailing + (from the last newline), and bc does >>> the math. >> >> Why do people use awk without using it? >> netstat -an | awk '{if ($0 ~ /tcp|udp/){ print $6;}END { print NF;}' >> gets you the number of lines at the end. Or, to be more elegant, >> netstat -an | \ >> awk '{if ($0 ~ /tcp|udp/) { >> array[$6] += 1; >> } >> END { >> for ( i in array ) { >> print i; >> sum += array[i]; >> } >> print sum; >> }' >> >> mark "me? like awk? yell at Larry Wall in '94 for proselytizing >> perl in comp.language.awk?" > > Pretty correct. I hate those pipe orgies and awk usage where people just > use it to print out a specific field. Why piping grep output into awk > when awk itself can grep? My point, exactly. > > Though Mark, I feel you miss something in your awk script. It does not > print the value of each state. > > LANG=C netstat -an | awk '/tcp|udp/ { array[$6] += 1; sum += 1 } END { > for ( i in array ) printf "%3s %s\n", array[i],i; print sum }' Or you could just ...END { for ( i in array ) { print i " " array[i]; } print sum; } because I already did += 1 in the main body, so the contents are totalled for that type. mark