我正在寻找使用awk从日志中提取一些信息,并根据返回的信息,我想grep整个文件,并从gerp和awk写所有输出到一个文件。我能够提取awk形式的一些信息,但同时使用grep awk内我无法提取信息。请找到如下日志。
2014-04-10 13:55:59,837 [WebContainer : 4] [com.cisco.ata.service.AtAService] WARN - AtAService::AtAServiceRequest DetailMessage - module=ataservice;service=ataservicerequest;APP_ID=CDCSDSATAUser.gen;VIEW_NAME=/EntitlementView[CCOID="frhocevar"]REQUEST_ID_STRING=-105411838, took 100 milliseconds.
字符串
根据REQUEST_ID_STRING,我必须获取usecaseID。
2014-04-10 13:55:59,800 [Thread-66] [com.cisco.ata.cla.CLAManager] INFO - CLAManager.getAttributeFromCLAMapping() took 6 ms, for useCaseID - UC41, condition= (CCOID=frhocevar), requestID= -105411838
型
我正在使用awk提取REQUEST_ID_STRING,但无法使用grep提取“useCaseID”。
下面是我使用的命令。
grep -i -r 'AtAService::AtAServiceRequest DetailMessage - module=ataservice;service=ataservicerequest' /opt/httpd/logs/apps/atasvc/prod1/was70/*/*.log* |
awk 'BEGIN{count=0;}{if($14>1000){print $0}}' |
awk 'BEGIN{ FS=";"}
{a = substr($3,8)}
{b = substr($4,index($4,"/")+1,index($4,"]R")-index($4,"/"))}
{c = substr($4,index($4,"G=")+2,index($4,", took")-index($4,"G=")-2);}
{d = substr($1,0,index($1,":")-1)}
{e=grep command which will extract usecaseid from $d having file name}
{ print a","b","c","d","e} '
型
1条答案
按热度按时间ttisahbt1#
这使用了一些基本的“尴尬”,使一些相当不错的样板出发点的很多东西。
字符串
这使用了一个非常基本的awk概念,如果您知道日志行中有一些公共的东西,(sessionID,或类似的东西),您可以根据某些条件创建一个数组(在本例中,日志行包含给定的字符串,并且倒数第二列> 99)。然后,当您遇到相同的sessionID时,您可以检查是否存在数组,如果是的话,再找出更多的信息
你可能需要/想在第二个if语句中添加一些东西,这样它就只检查你关心的日志行了,但老实说,awk太快了,这可能没什么关系。(我使用gawk [via brew]是因为OSX附带的awk版本有点不足,但这段代码足够基本,awk或gawk应该可以工作。)
如果您需要更好的代码解释,我将尝试更好地解释。
忍者编辑:一些退出提示:
grep -i
,除非你真的不知道你要找的大小写。大小写不敏感会让你的搜索慢很多fgrep
代替grep
。它开箱即用要快得多。