对于一个元素数组和一个输入文件,我想循环遍历该数组并将每个元素与输入文件进行匹配。然后,我想要获取输入文件中出现此元素的行以及紧随其后的 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