LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 981|回复: 1

实现字节统计,并排列!

[复制链接]
发表于 2006-12-27 09:33:16 | 显示全部楼层 |阅读模式
PR    D SRC                   DEST                 STATE   AGE   EXP  PKTS BYTES
tcp   O 192.168.11.104:2070   59.42.250.1:7709     10:10    16    14    10   573
tcp   O 192.168.11.104:2071   59.42.250.2:7709     10:10    16    14    10   566
tcp   O 192.168.11.104:2079   59.42.250.2:7711     10:10     3    27    10   1.4M
tcp   I 192.168.11.6:1063     58.60.9.22:8000       9:9     20    10     8   364
tcp   I 192.168.11.6:1064     58.61.33.42:7200     10:10    10    26     6   264
tcp   I 192.168.11.6:1062     58.60.10.170:80      10:10    25    11     6   264
tcp   I 192.168.11.6:1061     58.60.13.232:7200    10:10    26     8     5   224
tcp   O 192.168.11.214:1323   219.133.61.8:80       9:9     25     5    19 11298
tcp   O 192.168.11.214:1328   219.133.61.8:80       9:9     25     9    11  3220
tcp   O 192.168.11.140:2671   211.157.114.8:80      9:9     20    11    12  5170
tcp   I 192.168.11.10:2538    60.190.232.133:443    4:4   3107 17961   137 13112
tcp   O 10.3.2.3:60069        216.143.70.11:21      4:4    767 17243     6   360
tcp   O 192.168.11.140:2656   61.151.243.12:80      4:4     20 17982    15  4998
tcp   O 192.168.11.214:1324   58.61.33.14:80        9:9     25     6    12  3968
tcp   O 192.168.11.25:3041    58.60.9.16:8000       9:9     15    15    10   484
tcp   O 192.168.11.68:1634    58.60.9.16:8000       9:9     30     0    10   484
tcp   I 192.168.11.16:1107    218.93.248.112:7300   4:4   1030 18000  6227  391K
tcp   I 192.168.11.16:1116    218.93.248.112:7400   4:4   1011 18000  5946  323K
tcp   I 192.168.11.16:1126    218.93.248.112:7300   4:4    408 18000  3475  232K
tcp   I 192.168.11.16:1129    218.93.248.112:7300   4:4    368 18000  3907  336K
tcp   I 192.168.11.16:1092    221.231.140.204:7200  4:4   1060 18000 10288  834K
tcp   I 192.168.11.16:1095    221.231.140.204:7200  4:4   1051 18000  8727  597K
tcp   I 192.168.11.16:1120    221.231.140.204:7200  4:4    935 18000  8379  637K
tcp   I 192.168.11.16:1132    221.231.140.204:7200  4:4    259 18000  1842  140K
tcp   I 192.168.11.16:1138    221.231.140.204:7200  4:4    161 18000  1080 81698
tcp   O 192.168.11.68:1643    58.60.9.17:8000       9:9     26     4     9  1704
tcp   O 192.168.11.80:1145    216.49.88.18:80       4:4   2736 15313    17  8099
tcp   I 192.168.11.19:4271    192.168.10.1:22       4:4   3048 18000  4101  720K
tcp   I 192.168.11.19:4311    192.168.10.1:22       4:4   2908 17617   549  124K
tcp   I 192.168.11.19:4314    192.168.10.1:22       4:4   2880 17594   407 97131
tcp   I 192.168.11.19:4554    219.133.38.247:443    4:4   1130 16870     7   484

有一个文件的内容是这样的!
想做到BYTES统计!
也就是说将同一ip的byte相加!并从大到小排列!并自动转换单位!满 1024k就转成1M!
满 1024 byte 就转成 1K的样子!
输出的格式为

192.168.11.104  1.6M
192.168.11.214     1.2M
192.168.11.19       900K
192.168.11.69      680K
192.168.11.106    560K


的样子!请高手指点一下!
发表于 2006-12-27 12:20:42 | 显示全部楼层
  1. #!/bin/bash
  2. sed '1d' test |
  3. sed 's/:/ /g' |
  4. awk '{ print $3,$NF}' |
  5. awk '{if(substr($2,length($2),1)=="K")
  6.                 {print $1,$2*1024}
  7.          else {if(substr($2,length($2),1)=="M")
  8.                          {printf"%s %ld\n",$1,substr($2,1,length($2)-1)*1024*1024}
  9.                  else {print $1,$2}}} '|    #convert K,M to Bytes.
  10. awk '{
  11. sum[$1]+=$2}
  12. END {for(i in sum)
  13. if(sum[i]>1048576)
  14.      {printf"%-16s %-.2fM\n",i,sum[i]/1024/1024}
  15. else {if(sum[i]>1024)
  16.            {printf"%-16s %-.2fK\n",i, sum[i]/1024}
  17.       else {printf"%-16s %-dB\n", i,sum[i]}}
  18. }'   #convert Bytes back to K, M
复制代码
[sprite@calabash ~]$  ./kk
10.3.2.3 360
192.168.11.10 12.80K
192.168.11.104  1.40M
192.168.11.140  9.93K
192.168.11.16  3.49M
192.168.11.19 939.33K
192.168.11.214 18.05K
192.168.11.25 484
192.168.11.6  1.09K
192.168.11.68  2.14K
192.168.11.80  7.91K
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表