Linux 使用awk搜索模式并从日志文件打印下15行

Linux 使用awk搜索模式并从日志文件打印下15行,linux,bash,shell,awk,Linux,Bash,Shell,Awk,使用awk搜索模式并从日志文件打印下15行 awk'/^DERAT1SB[0-9][0-9]显示注册/{nr[nr];nr[nr+4]};NR’slb.log中的NR 我使用上面的命令在日志文件中搜索模式DERAT1SB23 show registration,但它抛出了一个语法错误 错误: awk:第1行附近的语法错误 awk:在第1行附近取出搜索图案并打印下15行:使用GNU sed sed -n '/pattern/,+15 p' file 使用普通awk: awk ' /pat

使用awk搜索模式并从日志文件打印下15行

awk'/^DERAT1SB[0-9][0-9]显示注册/{nr[nr];nr[nr+4]};NR’slb.log中的NR

我使用上面的命令在日志文件中搜索模式DERAT1SB23 show registration,但它抛出了一个语法错误

错误:

awk:第1行附近的语法错误


awk:在第1行附近取出搜索图案并打印下15行:使用GNU sed

sed -n '/pattern/,+15 p' file
使用普通awk:

awk '
    /pattern/ {
        print
        for (i=1; i<=15; i++) {getline; print}
        exit
    }
' file
awk:在1号线附近进行救援

是一个已知的问题,您应该在Solaris/SunOS系统上更改代码,将awk更改为/usr/xpg4/bin/awk、/usr/xpg6/bin/awk,或将nawk更改为:

多年来,awk语言已经进化出了一种玫瑰的名字。附录A中提供了完整的详细信息[项目的发展] awk语言],第439页。这本书中描述的语言通常是 称为新awk。通过类比,awk的原始版本是 称为旧awk

在大多数当前系统上,当您运行 awk实用程序如果您的系统 标准awk是旧的,如果您 尝试测试程序:

$ awk 1 /dev/null
error awk: syntax error near line 1
error awk: bailing out near line 1
在这种情况下,你 应该找到新的awk版本,或者只安装gawk

贯穿 这本书,每当我们提到一个语言功能,应该 在POSIX awk的任何完整实现中都可用,我们只需使用 术语awk。当提及特定于GNU的功能时 实现时,我们使用术语gawk

4只有Solaris系统仍然使用旧的awk for>作为默认的awk实用程序。更现代的awk位于这些系统的/usr/xpg6/bin中


你用的是旧的破awk。谷歌。之后您还可以调查其他问题。请向我们展示您尝试搜索的日志文件的片段,好吗?这可能会帮助你得到一个更好的答案。另外,如果您试图获取接下来的15行,我只需要使用grep搜索您需要的内容,然后使用-A标志指定搜索字符串后所需的行数,例如grep$str filename-A$lineNumyou正在使用awk的旧版本,其中old一词应替换为antigated。当您执行awk 1/dev/null时,将得到相同的错误。尽管如此,问题最有可能出现在您可能想逃避的中。@kvantour regexp.True中的a没有什么特别之处,但正如您发布的示例中所示,断开的awk无法在没有明确操作的情况下处理情况,因此现在看一下OPs脚本的最后一部分:-。nawk不如xpg awk缺少功能,因此与POSIX兼容程度不高,因此没有理由建议在任何xpg awk可用的系统上使用nawk。@EdMorton,当然,在一些SUN操作系统中,因为我没有见过nawk,所以我认为OP的系统上有哪一个,他/她就可以使用它了。AFAIK每个SUN/Solaris都有这两个,使用nawk的唯一原因是继续使用旧的nawk脚本,这会在POSIX awk.ITYM awk'/regexp/{c=16}c&&c-'文件或类似文件上中断。有关在匹配周围打印线条的更多示例,请参阅,有关使用getline的问题,请参阅。