linux日志分析常用命令

1.日志文件

 

java.lang.ArrayIndexOutOfBoundsException: 5
	at com.xxx.ds.bo.BO.setEntity(Unknown Source)	
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
java.lang.ArrayIndexOutOfBoundsException: 7
	at com.xxx.ds.bo.BO.setEntity(Unknown Source)	
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
 
java.lang.NullPointerException
	at com.xxx.ds.dao.DaoImpl.addTrail(Unknown Source)
	at java.lang.Thread.run(Thread.java:744)
java.lang.ArrayIndexOutOfBoundsException: 10
	at com.xxx.ds.bo.BO.setEntity(Unknown Source)	
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
java.lang.NullPointerException
	at com.xxx.ds.dao.DaoImpl.addTrail(Unknown Source)
	at java.lang.Thread.run(Thread.java:744)
 

2.日志去重

# cat syslog_1.log syslog_2.log|sed '/^\s*$/d' |sort |uniq >syslog_uniq.log

	at com.xxx.ds.bo.BO.setEntity(Unknown Source)	
	at com.xxx.ds.dao.DaoImpl.addTrail(Unknown Source)
	at java.lang.Thread.run(Thread.java:744)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
java.lang.ArrayIndexOutOfBoundsException: 10
java.lang.ArrayIndexOutOfBoundsException: 5
java.lang.ArrayIndexOutOfBoundsException: 7
java.lang.NullPointerException

  

3.日志过滤

# cat syslog_uniq.log |grep -v "ArrayIndexOutOfBoundsException:" >syslog_grep-v.log

	at com.xxx.ds.bo.BO.setEntity(Unknown Source)	
	at com.xxx.ds.dao.DaoImpl.addTrail(Unknown Source)
	at java.lang.Thread.run(Thread.java:744)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
java.lang.NullPointerException

 

-v:表示不包含正则式中内容

-E:多个关键字 (grep -E "word1|word2|word3"   file.txt)

 

4.命令说明

4.1 uniq

用法:uniq [选项]... [文件]  

从输入文件或者标准输入中筛选相邻的匹配行并写入到输出文件或标准输出。不附加任何选项时匹配行将在首次出现处被合并。  

长选项必须使用的参数对于短选项时也是必需使用的。

-c, --count             //在每行前加上表示相应行目出现次数的前缀编号  
 -d, --repeated          //只输出重复的行  
 -D, --all-repeated      //只输出重复的行,不过有几行输出几行  
 -f, --skip-fields=N     //-f 忽略的段数,-f 1 忽略第一段  
 -i, --ignore-case       //不区分大小写  
 -s, --skip-chars=N      //根-f有点像,不过-s是忽略,后面多少个字符 -s 5就忽略后面5个字符  
 -u, --unique            //去除重复的后,全部显示出来,根mysql的distinct功能上有点像  
 -z, --zero-terminated   //end lines with 0 byte, not newline  
 -w, --check-chars=N     //对每行第N 个字符以后的内容不作对照  
 --help                  //显示此帮助信息并退出  
 --version               //显示版本信息并退出

  

 命令详解,参见:http://blog.51yip.com/shell/1022.html

 4.2过滤空行

grep、sed、awk与tr命令,都可以删除文件中空行。

4.2.1 grep

# grep . data.txt          //效率比较高

# grep -v '^$' data.txt

# grep '[^$]' data.txt

4.2.2 sed

# sed  '/^$/d' data.txt

# sed '/^\s*$/d' data.txt   //命令还可将完全空格、tab等组成的空行删掉。

4.2.3 awk

# awk NF data.txt   //命令还可以将空格、tab等组成的空行删掉。

# awk '!/^$/' data.txt

awk简明教程,参见:http://coolshell.cn/articles/9070.html

4.2.4 tr

tr -s '\n' < data.txt

猜你喜欢

转载自victorwmh.iteye.com/blog/2338402