Как использовать awk & cut

У меня нет опыта работы с awk & cut, пожалуйста, помогите мне с моим вопросом. У меня есть команда для подсчета общего количества подключений к порту 80 моего сервера с каждого IP-адреса.

netstat -na|grep ":80" |awk '{print $5}'|cut -d : -f1|sort | uniq -c | sort -nr
      4 173.252.80.117
      4 173.252.80.116
      4 173.252.80.113
      2 173.252.80.119
      2 173.252.80.118
      2 173.252.80.115
      1 66.249.64.170
      1 173.252.80.114
      1 173.252.80.112

У меня есть команда для отображения состояния соединения между портом 80 моего сервера с каждым IP-адресом

netstat -nat | grep ":80" | grep -v LISTEN | awk '{print $5 "\t" $6}' | sort | uniq -c
      1 192.168.14.91:54008     TIME_WAIT
      1 192.168.14.91:54009     TIME_WAIT
      1 192.168.14.91:54010     TIME_WAIT
      1 192.168.14.91:54011     TIME_WAIT
      1 192.168.14.91:54012     TIME_WAIT
      1 192.168.14.91:54013     TIME_WAIT
      1 192.168.15.82:54071     ESTABLISHED
      1 192.168.15.82:54072     ESTABLISHED
      1 192.168.15.82:54073     ESTABLISHED
      1 192.168.15.82:54074     ESTABLISHED
      1 192.168.15.82:54075     ESTABLISHED
      1 192.168.15.82:54076     ESTABLISHED

Как мне изменить свою команду, чтобы сделать вывод следующим образом:

3 192.168.14.91 ESTABLISHED 2 192.168.14.91 FIN_WAIT2 6 192.168.14.91 TIME_WAIT 6 192.168.15.82 ESTABLISHED 2 192.168.15.82 SYN_RECEIVED 6 192.168.152.


person user36814    schedule 15.12.2014    source источник
comment
вам никогда не понадобятся sed, grep или cut, если вы используете awk, поскольку awk может делать то же, что и они.   -  person Ed Morton    schedule 15.12.2014


Ответы (2)


по awk

netstat -nat |awk '!/LISTEN/&&/:80/{split($5,a,":");b[a[1] FS $6]++}END{for (i in b) print b[i],i}'
person BMW    schedule 15.12.2014
comment
Большое спасибо, это то, что мне нужно. - person user36814; 15.12.2014

Изменять

netstat -na |
grep ":80" |awk '{print $5}'|cut -d : -f1|sort | uniq -c

to

netstat -na |
awk -v OFS='\t' '/:80/{split($5,a,/:/); cnt[a[1]]++} END{for (ip in cnt) print cnt[ip], ip}'

а также

netstat -nat |
grep ":80" | grep -v LISTEN | awk '{print $5 "\t" $6}' | sort | uniq -c

to

netstat -nat |
awk -v OFS='\t' '/:80/ && !/LISTEN/{split($5,a,/:/); cnt[a[1] OFS $6]++} END{for (ip in cnt) print cnt[ip], ip}'

и | sort -nr до концов, как вам нравится.

person Ed Morton    schedule 15.12.2014