0

如何理解下面的 awk 命令?

nawk 'a-- >= 0; /datamart_extractrelations_static/ {a = 30}' app.log

给定一个 awk 程序的格式为:

pattern { action }

'a-- >= 0' 是做什么的?这个操作什么时候执行?

4

2 回答 2

3

该命令与以下内容相同:

nawk 'a-- >= 0 {print}; /datamart_extractrelations_static/ {a = 30}' app.log

Ifa-- >= 0 awk将打印当前行,因为如果未指定任何操作,则print默认操作将在该操作中执行。awk

结果,该命令将在包含该模式的行之后打印第 30 行datamart_extractrelations_static

为了更好地理解这一点,您可以简单地尝试以下命令:

awk '1' input

由于1将始终评估为true并且默认操作是print awk打印输入的每一行不变。

于 2015-04-17T15:31:25.277 回答
1

在输入中找到 datamart_extractrelations_static 之后,有些人并没有完全理解打印 30 行的习语。请参阅使用 sed 或 awk 在匹配模式之后打印一行,并专门查看“在某些模式之后打印 N 条记录”以获取正确的代码。您发布的代码缺少对a(谁命名计数变量a???)的领先测试,以确保 var 不会为一个巨大的文件持续递减到零以下,并最终环绕并再次出现正面。

于 2015-04-17T15:57:33.807 回答