如何理解下面的 awk 命令?
nawk 'a-- >= 0; /datamart_extractrelations_static/ {a = 30}' app.log
给定一个 awk 程序的格式为:
pattern { action }
'a-- >= 0' 是做什么的?这个操作什么时候执行?
该命令与以下内容相同:
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
打印输入的每一行不变。
在输入中找到 datamart_extractrelations_static 之后,有些人并没有完全理解打印 30 行的习语。请参阅使用 sed 或 awk 在匹配模式之后打印一行,并专门查看“在某些模式之后打印 N 条记录”以获取正确的代码。您发布的代码缺少对a
(谁命名计数变量a
???)的领先测试,以确保 var 不会为一个巨大的文件持续递减到零以下,并最终环绕并再次出现正面。