gpt4 book ai didi

linux - 使用 awk 进行多重搜索 - 模式 + 算术条件

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:40:20 28 4
gpt4 key购买 nike

我正在尝试使用 awk 命令执行多项搜索以从符合以下 2 个条件的日志文件中获取记录:

  1. 模式 - EXEC_TIME
  2. 最后一列,即 EXEC_TIME > 5000 毫秒。

我尝试并使用了下面的命令,但它没有给我正确的输出,不确定是否可以使用相同的方式!

我刚刚开始学习 awk,因此我们将不胜感激。

awk -F ':' '/EXEC_TIME/&&$15>="5000"{print $2,$15}' TransactionInfoLogs.log

MP170420.0548.T00003[SERV] 9065 ms
OC170420.0655.T00001[SERV] 708 ms

下面是示例日志文件:

[TXN_ID]:MP170420.0548.T00003[SERV][SERV]:BLKSRVREQ[MSISDN]:8028359017[SV_CHRG_ID]:37152[RESP_CODE]:200[START]:Thu Apr 20 12:44:23 WAT 2017 [END]:Thu Apr 20 12:44:23 WAT 2017[EXEC_TIME]:9065 ms
[TXNID]:XX170420.1244.C01465[TYPE]:SERVICE_CHARGE_PAYER_PAYEE[AMT]:0[PR_MSISDN]:8028359017[PR_MFS]:101[PR_W_TYPE]:12[PR_PREBAL]:0[PR_BAL]:0[PY_MSISDN]:IND03[PY_MFS]:101[PY_W_TYPE]:null[PY_PRE
BAL]:2782239[PY_BAL]:2782239
[2017-04-20 12:44:29,552][http-bio-172.24.87.5-7890-exec-7365]-
[TXN_ID]:XX170420.1244.C01467[SERV]:null[MSISDN]:8080967233[RESP_CODE]:00066[START]:Thu Apr 20 12:44:29 WAT 2017 [END]:Thu Apr 20 12:44:29 WAT 2017[EXEC_TIME]:9 ms
[2017-04-20 12:44:36,634][http-bio-172.24.87.5-7890-exec-7364]-
[TXN_ID]:OC170420.0655.T00001[SERV]:null[MSISDN]:7016532415[RESP_CODE]:00066[START]:Thu Apr 20 12:44:36 WAT 2017 [END]:Thu Apr 20 12:44:36 WAT 2017[EXEC_TIME]:708 ms
[2017-04-20 12:44:45,820][http-bio-172.24.87.5-7890-exec-7359]-
[TXN_ID]:XX170420.1244.C01471[SERV]:null[MSISDN]:8026136275[RESP_CODE]:00066[START]:Thu Apr 20 12:44:45 WAT 2017 [END]:Thu Apr 20 12:44:45 WAT 2017[EXEC_TIME]:39 ms
[2017-04-20 12:44:46,010][http-bio-172.24.87.5-7890-exec-7366]-
[TXN_ID]:XX170420.1244.C01473[SERV]:BLKSRVREQ[MSISDN]:8127459541[SV_CHRG_ID]:37152[RESP_CODE]:200[START]:Thu Apr 20 12:44:45 WAT 2017 [END]:Thu Apr 20 12:44:46 WAT 2017[EXEC_TIME]:221 ms
[TXNID]:XX170420.1244.C01473[TYPE]:SERVICE_CHARGE_PAYER_PAYEE[AMT]:0[PR_MSISDN]:8127459541[PR_MFS]:101[PR_W_TYPE]:12[PR_PREBAL]:0[PR_BAL]:0[PY_MSISDN]:IND03[PY_MFS]:101[PY_W_TYPE]:null[PY_PRE
BAL]:2853870[PY_BAL]:2853870
[2017-04-20 12:44:49,989][http-bio-172.24.87.5-7890-exec-7371]-
[TXN_ID]:XX170420.1244.C01475[SERV]:BLKSRVREQ[MSISDN]:8089138902[SV_CHRG_ID]:37152[RESP_CODE]:200[START]:Thu Apr 20 12:44:49 WAT 2017 [END]:Thu Apr 20 12:44:49 WAT 2017[EXEC_TIME]:57 ms
[TXNID]:XX170420.1244.C01475[TYPE]:SERVICE_CHARGE_PAYER_PAYEE[AMT]:0[PR_MSISDN]:8089138902[PR_MFS]:101[PR_W_TYPE]:12[PR_PREBAL]:0[PR_BAL]:0[PY_MSISDN]:IND03[PY_MFS]:101[PY_W_TYPE]:null[PY_PRE
BAL]:3071459[PY_BAL]:3071459

最佳答案

每当输入文件中有名称->值映射时,最好首先创建该映射的数组(下面的 n2v[]),然后您可以通过它引用每个字段名称而不是位置,例如:

$ cat tst.awk
{
delete n2v
while ( match($0,/\[[^]]+]:/) ) {
if ( name != "" ) {
value = substr($0,1,RSTART-1)
sub(/\[.*/,"",value)
n2v[name] = value
}
name = substr($0,RSTART+1,RLENGTH-3)
$0 = substr($0,RSTART+RLENGTH)
}
value = $0
n2v[name] = value

for (name in n2v) {
value = n2v[name]
print name, "->", value
}
}

$ head -1 file | awk -f tst.awk
EXEC_TIME -> 9065 ms
START -> Thu Apr 20 12:44:23 WAT 2017
RESP_CODE -> 200
SV_CHRG_ID -> 37152
TXN_ID -> MP170420.0548.T00003
END -> Thu Apr 20 12:44:23 WAT 2017
MSISDN -> 8028359017
SERV -> BLKSRVREQ

然后你可以调整上面的内容来做任何你想做的事情:

$ cat tst.awk
{
delete n2v
while ( match($0,/\[[^]]+]:/) ) {
if ( name != "" ) {
value = substr($0,1,RSTART-1)
sub(/\[.*/,"",value)
n2v[name] = value
}
name = substr($0,RSTART+1,RLENGTH-3)
$0 = substr($0,RSTART+RLENGTH)
}
value = $0
n2v[name] = value
}

n2v["EXEC_TIME"]+0 > 5000 { print n2v["TXN_ID"], n2v["EXEC_TIME"] }

$ awk -f tst.awk file
MP170420.0548.T00003 9065 ms

关于linux - 使用 awk 进行多重搜索 - 模式 + 算术条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43519050/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com