如何使用变量在两个模式之间提取线条

时间:2017-05-03 06:19:32

标签: awk

$ cat /tmp/zfssa_check_raw.log
====== aps_akd_service_offline.output ======
WARN: akd service state is online
====== aps_akd_service_offline.result:1 ======

使用固定模式字符串,它可以按预期工作。

$ awk '/aps_akd_service_offline.output/{flag=1;next}/aps_akd_service_offline.result/{flag=0}flag' /tmp/zfssa_check_raw.log
WARN: akd service state is online

但是当我使用a和b变量来表示灵活的模式时, 它什么都没显示。我不知道为什么,有人可以在这帮忙吗?

$ awk -v a="aps_akd_service_offline.output" -v b="aps_akd_service_offline.result" '/a/{flag=1;next}/b/{flag=0}flag' /tmp/zfssa_check_raw.log

$ a="aps_akd_service_offline.output"
$ b="aps_akd_service_offline.result"

$ awk -va="${a}" -vb="${b}" '/a/{flag=1;next}/b/{flag=0}flag' /tmp/zfssa_check_raw.log

1 个答案:

答案 0 :(得分:0)

要与变量进行正则表达式匹配,请使用~运算符:

awk -v a="aps_akd_service_offline.output" -v b="aps_akd_service_offline.result" \
            '$0 ~ a {flag=1;next} $0 ~ b {flag=0}flag' /tmp/zfssa_check_raw.log