LinuxSir.cn,穿越时空的Linuxsir!

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

有点难度的shell问题,怎样统计日志各记录及次数?

[复制链接]
发表于 2004-12-22 01:23:00 | 显示全部楼层 |阅读模式
有点难度的shell问题,怎样统计日志各记录及次数?

可能仅对我这个新手有点难度, 盼各位高手解惑!

例如有1个log.txt文件,如下:
192.168.0.10 WEWEWEQWEQWEQWEQWEQWEQWEW
192.168.0.12 WEWEWEQWEQWEQWEQWEQWEQWEW
192.168.1.10 WEWEWEQWEQWEQWEQWEQWEQWEW
192.168.0.16 WEWEWEQWEQWEQWEQWEQWEQWEW
192.168.0.20 WEWEWEQWEQWEQWEQWEQWEQWEW
192.168.2.10 WEWEWEQWEQWEQWEQWEQWEQWEW
192.168.1.10 WEWEWEQWEQWEQWEQWEQWEQWEW
192.168.0.10 WEWEWEQWEQWEQWEQWEQWEQWEW
192.168.1.11 WEWEWEQWEQWEQWEQWEQWEQWEW
192.168.2.10 WEWEWEQWEQWEQWEQWEQWEQWEW
192.168.1.10 WEWEWEQWEQWEQWEQWEQWEQWEW
...

想做一个shell,自动统计192.168.0.0网段的每个记录及重复次数,统计结果如下:
192.168.0.10 3
192.168.0.11 1
192.168.0.12 1
192.168.0.16 1
192.168.1.10 2
192.168.1.11 1
192.168.2.10 2
...

我知道 类似这样命令可以统计1个特定记录如192.168.0.10次数 cat log.txt |egrep 192.168.0.10 |sed -n '$='
但怎样做到每个记录及重复次数?
发表于 2004-12-22 02:10:38 | 显示全部楼层
cat test.txt | cut -d" " -f1 | sort | uniq -c
 楼主| 发表于 2004-12-22 10:56:45 | 显示全部楼层
thanks henryouly ! 还有以下几种解法参考:

> for ip in $(cut -f1 -d' '<file|sort -u);do
> echo $ip && grep -c $ip file
> done|xargs -n2

awk '{a[$1]+=1}END{for(i in a) print i,a}' filename
发表于 2004-12-22 12:39:37 | 显示全部楼层
#!/bin/sh
I=0
while [ $I -lt 255 ]
do
I=$[ $I+1 ]
Count=0
IP=192.168.0.$I
while read IPA M
do
  if [ $IPA = $IP ]
  then
   Count=$[ $Count+1 ]
  fi
done<log.txt
if [ $Count -gt 0 ]
  then
echo "$IP        $Count"
fi
done
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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