You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用awk处理多字符分隔符提取日志内容?

问题描述

我有如下格式的日志文件:

Insert request received from system 1
Modify request received from system 2

我想要提取日志中“received from”之后的文本。若cut命令支持多字符分隔符,等效的grep和cut命令为:

grep "received from" mylogfile.log | cut -d"received from" -f2

(注:原命令中的-f1应为-f2,因为分隔后第二部分才是“received from”之后的内容)

请问如何用awk实现该功能?


AWK实现方案

以下几种方式都可以实现需求:

方式1:利用split函数分割字符串

/received from/ {
    split($0, parts, "received from")
    print parts[2]
}

工作逻辑:先筛选出包含“received from”的行,再用split将整行按指定分隔符拆分为数组parts,数组的第二个元素即为分隔符之后的目标文本,直接打印即可。

方式2:正则替换前置内容

/received from/ {
    sub(/.*received from/, "")
    print $0
}

工作逻辑:匹配目标行后,使用sub函数把从行开头到“received from”的所有内容替换为空,剩余的整行就是需要提取的文本。

方式3:自定义字段分隔符(FS)

BEGIN {
    FS = "received from"
}
/received from/ {
    print $2
}

工作逻辑:在BEGIN块中把AWK的字段分隔符FS设置为“received from”,这样每行会被拆分为两个字段,第二个字段$2就是我们要的内容,筛选目标行后打印该字段即可。


内容的提问来源于stack exchange,提问作者CS1999

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 11:05:18