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の例とチュートリアルと一致するように、awkの例をBEGINセクションとENDセクションに書き換えることはできますか?ありがとう

ベストアンサー1

問題は、変数をvar正規表現パターンに貼り付けることができないことです/var/
代わりに、行全体を$0その変数と一致させます(この場合は正規表現パターンとして扱われます)。

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

おすすめ記事