答案1
您已将行限制逻辑放在“BEGIN”块中,该块将被执行前 awk
读入任何数据。将该逻辑移至主循环:
NR >= 7 && NR <= 13 && /word/ { print }
$0
是默认print
参数,如果没有给出...或者,甚至更短
NR >= 7 && NR <= 13 && /word/
如果没有指定的话, since{print}
是默认操作。脚本
的主体awk
采用“模式”“动作”的形式;您希望该模式为您想要的操作添加前缀。在这里,该模式要求三个测试都为真,并且操作是打印该行。将 放在print
单独的行上意味着“通过”测试时没有“操作”,并且没有用于打印每一行的“模式” - 导致每一行都被打印。
答案2
只是补充杰夫的回答其中一个写在sed
:
sed -n '7,13 { /expression/ p; }' <file
这将打印第 7 行和第 13 行(含)之间与正则表达式匹配的每一行expression
。默认输出被关闭,-n
因此只有使用命令显式打印的行p
才会被输出。
将上述脚本直接翻译sed
为awk
:
awk 'NR == 7, NR == 13 { if (/expression/) print }' <file
该条件NR == 7, NR == 13
应理解为“从任意为NR
7 的输入记录,到任意为 13 的输入记录NR
”,其中“输入记录”默认为一行,NR
是迄今为止读取的记录(行)数。
答案3
怎么样
awk 'NR>6&&NR<14&&/word/' file