无意看到这样一个命令:
cat cxx_Biz.log.2018-04-27-AM |grep ERROR| awk -F '[' '{print 1}'| sort |uniq -c|wc -l
该命令用来统计日志中文本出现的次数。但是其中的命令不太熟悉。
我们一般用到的的日志查看相关指令:
tail -f -n 100 catalina.out
less catalina.out|grep ERROR
如果需要统计文本出现次数,比如Error出现的次数怎么办?因此需要具备一下知识:
1.cat命令:
cat命令是整个文件的内容从上到下显示在屏幕上。还可以将多个文件连接起来显示,它常与重定向符号配合使用,适用于文件内容少的情况.
at命令主要有三大功能
1.一次显示整个文件 cat filename
2.创建一个文件 cat > fileName
3.将几个文件合并为一个文件 cat file1 file2 > file
参数:
-n 或 –number 由 1 开始对所有输出的行数编号
-b 或 –number-nonblank 和 -n 相似,只不过对于空白行不编号
-s 或 –squeeze-blank 当遇到有连续两行以上的空白行,就代换为一行的空白行
-v 或 –show-nonprinting
2.| 管道
管道的作用是将左边命令的输出作为右边命令的输入
3.awk 命令
awk 是行处理器,优点是处理庞大文件时不会出现内存溢出或处理缓慢的问题,通常用来格式化文本信息。awk依次对每一行进行处理,然后输出。
4.sort 命令
sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。
-b:忽略每行前面开始出的空格字符;
-c:检查文件是否已经按照顺序排序;
-d:排序时,处理英文字母、数字及空格字符外,忽略其他的字符;
-f:排序时,将小写字母视为大写字母;
-i:排序时,除了040至176之间的ASCII字符外,忽略其他的字符;
-m:将几个排序号的文件进行合并;
-M:将前面3个字母依照月份的缩写进行排序;
-n:依照数值的大小排序;
-o<输出文件>:将排序后的结果存入制定的文件;
-r:以相反的顺序来排序;
-t<分隔字符>:指定排序时所用的栏位分隔字符;
5.uniq 命令
uniq 命令用于报告或忽略文件中的重复行,一般与sort命令结合使用
-c或——count:在每列旁边显示该行重复出现的次数;
-d或–repeated:仅显示重复出现的行列;
-f<栏位>或–skip-fields=<栏位>:忽略比较指定的栏位;
-s<字符位置>或–skip-chars=<字符位置>:忽略比较指定的字符;
-u或——unique:仅显示出一次的行列;
-w<字符位置>或–check-chars=<字符位置>:指定要比较的字符。
6.> 命令
命令 > 是定向输出到文件,如果文件不存在,就创建文件。如果文件存在,就将其清空
另外 >>是将输出内容追加到目标文件中。其他同>
演示
创建文件
➜ uc cat > test_1.log
ERROR [dewdwededeqw
ERROR [adswwxdwexweddsacd
Exception
ddxwwdxw
dwsxwxwx
ERROR [123421342312^[[D^[[D
ERROR [Heal-Session-Thread] (MemcachedConnector.java:166) - Reconnect to 192.168.200.123:8888 fail
ERROR [Xmemcached-Reactor-0] (MemcachedConnector.java:528) - Exception occured in contr
查看文件
➜ uc cat test.log
ERROR
EXCEPTION
ERROR
ERROR
取出每一行需要的字符串
➜ uc cat test_1.log | awk -F '[' '{print $1}'
ERROR
ERROR
Exception
ddxwwdxw
dwsxwxwx
ERROR
ERROR
ERROR
说明:awk命令:-F指定分隔符"[",是一个正则表达式;{print $1}指把第一个值打印出来。
3 对行进行排序
先排序是因为去重与统计的 ‘unip’命令只能处理相邻行
➜ uc cat test_1.log | awk -F '[' '{print $1}'|sort
ERROR
ERROR
ERROR
ERROR
ERROR
Exception
ddxwwdxw
dwsxwxwx
4 统计数量与去重
➜ uc cat test_1.log | awk -F '[' '{print $1}'|sort|uniq -c
1 ERROR
4 ERROR
1 Exception
1 ddxwwdxw
1 dwsxwxwx
可以得到每个字符串所对应的出现次数
5 按重复次数排序
➜ uc cat test_1.log | awk -F '[' '{print $1}'|sort|uniq -c|sort -rn
4 ERROR
1 dwsxwxwx
1 ddxwwdxw
1 Exception
1 ERROR
sort 的 -n:依照数值的大小排序;-r 按照相反顺序排列
6 将结果输出到文件中
➜ uc cat test_1.log | awk -F '[' '{print $1}'|sort|uniq -c|sort -rn>test_res.log
回到最开始的命令就容易明白其含义了。
cat cxx_Biz.log.2018-04-27-AM |grep ERROR| awk -F '[' '{print $2}'|awk -F ' ' '{print $1}'| sort |uniq -c|wc -l
其中的wc命令是干什么的?
Linux系统中的wc(Word Count)命令的功能为统计指定文件中的字节数、字数、行数,并将统计结果显示输出。
1.命令格式:
wc [选项]文件...
2.命令功能:
统计指定文件中的字节数、字数、行数,并将统计结果显示输出。该命令统计指定文件中的字节数、字数、行数。如果没有给出文件名,则从标准输入读取。wc同时也给出所指定文件的总统计数。
3.命令参数:
-c 统计字节数。
-l 统计行数。
-m 统计字符数。这个标志不能与 -c 标志一起使用。
-w 统计字数。一个字被定义为由空白、跳格或换行字符分隔的字符串。
-L 打印最长行的长度。
-help 显示帮助信息
--version 显示版本信息
比如统计总行数:
➜ uc cat test_1.log | awk -F '[' '{print $1}'|sort|uniq -c
1 ERROR
4 ERROR
1 Exception
1 ddxwwdxw
1 dwsxwxwx
➜ uc cat test_1.log | awk -F '[' '{print $1}'|sort|uniq -c|wc -l
5
网友评论