善用命令组合(grep,sort,cut,uniq)

先看一段数据,  文件名 sys.log


[INFO] 10:30:01 [OrderAdd] – id=0001,customerid=C0001,buyOrSell=2,qty=3
[DEBUG] 10:30:02 [OrderUpdate] – id=0001,customerid=C0001,buyOrSell=2,qty=3
[DEBUG] 10:30:03 [OrderDel] – id=0001,customerid=C0001,buyOrSell=2,qty=3
[INFO] 10:30:04 [OrderAdd] – id=0002,customerid=C0002,buyOrSell=2,qty=3
[DEBUG] 10:30:05 [OrderAdd] – id=0003,customerid=C0003,buyOrSell=2,qty=3
[ERROR] 10:30:06 [OrderUpdate] – id=0003,customerid=C0003,buyOrSell=2,qty=3
[INFO] 10:30:07 [OrderProcess] – id=0002,customerid=C0002,buyOrSell=2,qty=3
[ERROR] 10:30:08 [OrderUpdate] – id=0003,customerid=C0003,buyOrSell=2,qty=3
[DEBUG] 10:30:09 [OrderDel] – id=0002,customerid=C0002,buyOrSell=2,qty=3
[ERROR] 10:30:10 [OrderDel] – id=0003,customerid=C0003,buyOrSell=2,qty=3


 

场景1:检索所有ERROR日志信息

cat sys.log | grep 'ERROR'

场景2:检索所有DEBUG或ERROR日志信息

cat sys.log | grep -E 'DEBUG|ERROR'

场景3:id都出现了那些

cat sys.log | cut -d ','  -f 1 | cut -d '=' -f 2 | sort | uniq
#或者使用grep精确匹配,当然,上面的cut直接截取效率更高
cat sys.log | grep -P -o 'id=.*?,' | cut -d "," -f1 | cut -d "=" -f2 | sort | uniq

场景4:id都出现了那些,每个出现多少次

cat sys.log |  cut -d ','  -f 1 | cut -d '=' -f 2 | sort | uniq -c

场景5:id都出现了那些,每个出现多少次,并按次数从大到小排序

cat sys.log | cut -d ','  -f 1 | cut -d '=' -f 2 | sort | uniq -c | sort -n -k1 -r

场景6:customerid都出现了那些,每个出现多少次,并按次数从大到小排序

cat sys.log | grep 'customerid' | cut -d ','  -f 2 | sed 's/customerid=//g' | sort | uniq -c | sort -n -k1 -r

发表评论

电子邮件地址不会被公开。 必填项已用*标注