让 awk 打印与变量匹配的行和接下来的 n 行,并在 awk 中使用变量

让 awk 打印与变量匹配的行和接下来的 n 行,并在 awk 中使用变量

对于一个元素数组和一个输入文件,我想循环遍历该数组并将每个元素与输入文件进行匹配。然后,我想要获取输入文件中出现此元素的行以及紧随其后的 3 行。我尝试这样做:

for variable in $array
do
awk -v var="$variable" '/var/{x=NR+3}(NR<=x){print}' inputfile.txt
done

但这并没有返回所需的输出。然后我尝试了 grep:

for variable in $array
do
grep -A 3 "$variable" inputfile.txt
done

这有效。我想我解决了我的问题,但是因为我想更好地了解 awk,所以我决定发布这个问题,因为我很好奇当我尝试向 awk 提供变量时我做错了什么。我想我可能会感到困惑,因为我拿起的 awk 片段没有 BEGIN 部​​分?我猜假设 BEGIN 部​​分是不必要的?我的问题可以用awk解决吗? awk 是完成这项任务的最佳工具吗?我的 awk 示例是否可以重写为具有 BEGIN 和 END 部分,以便它与我在互联网上其他地方查看过的 awk 中的示例和教程相匹配?谢谢

答案1

问题是您无法将变量粘贴var到正则表达式模式中/var/
相反,将整行$0与该变量匹配(在这种情况下,它将被视为正则表达式模式)

awk -v var="$variable" '$0~var{x=NR+3}(NR<=x){print}' inputfile.txt

相关内容