统计log4j文件中的每一列的数量

给定一个数据文件,格式如下:

2014-01-21 01:27:25|505110511304|5|2||||Unknown|E_189
2014-01-21 01:28:11|505110511305|5|2||||Unknown|E_189
2014-01-21 01:28:59|431110510793|5|2||||Unknown|E_189
2014-01-21 01:31:51|400110511403|5|2||||Unknown|E_189
2014-01-21 01:32:22|378110511027|5|2||||Unknown|E_189

……
现在的需求是这样的,我要统计下第二个字段中有多少个不同的值,这个要怎么统计呢?
 
按照正常逻辑,应该是获取到文件的第二列,然后对第二列进行切分,排序,统计即可实现我们的目标。但说起来容易做起来难 啊。

在实现这个功能时,主要用到如下命令:

cat

awk

sort

uniq

wc

 
看看具体要怎么写这个数据分析统计的代码吧:

 [zh_readonly@172 logs]$ cat loginAllLog.log|awk(split($2,myarr,"|"))|sort|uniq -c
-bash: syntax error near unexpected token `split'
[zh_readonly@172 logs]$ cat loginAllLog.log|awk '{
> split($2,myarr,"|")
> for(i in myarr){
> print myarr[i]
> }
> }'|sort|uniq -c|wc -l
2766

注意,cat是读取文件名为loginAllLog.log|的文件,然后通过管线命令传递给awk命令,然后通过split函数对文件的第二个字段按照“|”进行切分,并

把产生的结果赋值给myarr的数组,然后通过for循环调用print函数输出数组中的数据;再把输出的结果传递给sort进行排序,然后通过uniq -c进行唯一

性统计;最后把上一步的结果通过管线命令传递给wc -l命令统计出一共有多少行记录即可获取到文本文件第二个字段有多少不同的值了。下面的是不排

重的结果:
[zh_readonly@172 logs]$ cat loginAllLog.log|awk '{
split($2,myarr,"|")
for(i in myarr){
print myarr[i]
}
}'|sort|wc -l
6837

END

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值