shell脚本统计服务器日志文件信息

有段时间没有接触shell,对命令有些生疏,今天接到统计日志信息的任务,浪费了不少时间,决定还是记录一哈

根据某一列进行去重排序统计并对另一列求和

示例:

      4  115223

      1  115277

      1  115277

      2  115223

目标:

      115223  6

      115277  2

shell脚本:

grep -v '^$' count.log

| awk -F ' ' '{sum[$2]+=$1;} END {for(c in sum){print c,sum[c];}}' 

| sort -n -r -k 2 >> sum.log

解析:

1.grep -v  '^$' 对log中的空行过滤

2.awk

-F列分隔符

'{sum[$2]+=$1;} END {for(c in sum){print c,sum[c];}}' 根据列进行操作

sum[$2]+=$1  根据第二列对第一列求和

END 求和完毕进行输出

for(c in sum){print c,sum[c];}  使用for循环输出

3.sort 进行排序

-n  根据数值大小排序

-r  从大到小排序,不写则默认从小到大

-k  根据第几列排序,2根据第二列

获取日志文件的信息

示例:

2018-09-12 15:20:55.615 [INFO] [com.xxx.service.impl.xxx][192] xxx: xxx:113740 | returnCode:0

2018-09-12 15:27:36.870 [INFO] [com.xxx.service.impl.xxx][192] xxx: xxx:113740 | returnCode:0

2018-09-12 15:27:40.688 [INFO] [com.xxx.service.impl.xxx][192] xxx: xxx:113740 | returnCode:0

2018-09-12 15:27:43.017 [INFO] [com.xxxservice.impl.xxx][192] xxx: xxx:113740 | returnCode:0

目标:

113740    4

shell脚本:

file_name="xxx*";

grep 'returnCode:0' ../$file_name

| awk -F ':' '{print $6}'

| awk -F ' | '  '{print $1}'

| uniq -c

>> count.log

解析:

1.file_name 文件名匹配

2.grep 'returnCode:0' ../$file_name

根据文件名匹配所有结果码为成功的行

3.awk -F ':' '{print $6}'

根据:分隔符获取第六列

4.awk -F ' | '  '{print $1}'

根据 | 分隔符获取第六列中的第一列

5.  uniq -c

去重并累加

6. >> count.log

把结果写到log

你可能感兴趣的:(shell脚本统计服务器日志文件信息)