我正在尝试编写一个脚本(.awk),它将打印出第 7-13 行之间包含特定字符串的行。我已经部分工作了,但是它打印出包含该字符串的所有行,而不仅仅是 7-13 之间的行。
#!/usr/bin/awk -f
BEGIN { (NR>=7) && (NR<=13) }
/word/ {print $0}
Run Code Online (Sandbox Code Playgroud)
运行时的输出
script.awk filename
Run Code Online (Sandbox Code Playgroud)
是包含该单词的所有行
编辑:
在尝试了杰夫的建议后,我得到了他的建议。/needle/ 是关键字。
问题是我在另一行有 {print $0} ,习惯了在其他语言中我喜欢将代码分开
您已将行限制逻辑放在“BEGIN”块中,该块在读入任何数据之前 awk执行。将该逻辑移至主循环:
NR >= 7 && NR <= 13 && /word/ { print }
Run Code Online (Sandbox Code Playgroud)
$0是默认print参数,如果没有给出...或者,甚至更短
NR >= 7 && NR <= 13 && /word/
Run Code Online (Sandbox Code Playgroud)
{print}如果没有指定的话,since是默认操作。
脚本的主体awk采用“模式”“动作”的形式;您希望该模式为您想要的操作添加前缀。在这里,该模式要求三个测试都为真,并且操作是打印该行。将 放在print单独的行上意味着“通过”测试时没有“操作”,并且没有用于打印每一行的“模式” - 导致每一行都被打印。