【问题标题】:Reprint a Dynamic RS (Record Separator) in awk在 awk 中重新打印动态 RS(记录分隔符)
【发布时间】:2016-09-18 21:22:53
【问题描述】:

在此示例中,我使用以下 awk 命令仅打印包含特定文本字符串 (3705@192.168.1.5) 的部分/记录。这很好用,但是 awk 在打印输出时会删除记录分隔符。 对于基于通用文本的 RS,我可以使用 {print RS, $0} 重新打印它,但在这种情况下,awk 在每条记录之前打印正则表达式。

awk 'BEGIN{RS="([01]?[0-9]|2[0-3]):[0-5][0-9]: [0-5][0-9].[0-9][0-9][0-9]";} /3705@192.168.1.5/ {print RS , $0}' /var/log/abc.log

有没有办法在每条记录之前打印 RS(在这种情况下为时间戳)?谢谢

【问题讨论】:

    标签: regex bash awk


    【解决方案1】:

    您必须已经在使用 gawk,因为您使用的是多字符 RS,因此只需打印 RT 而不是 RS。阅读 Arnold Robbins 所著的《Effective Awk Programming, 4th Edition》一书。

    【讨论】: