パターンを一致させ、その後に2行を印刷しようとしています。次のコードを使用すると、これを正常に実行できます。
awk '/'202404'/{c=3}c&&c--' consolelog.log > testing.txt
202404
端末に入力できるものに変更しようとします。これまで私は試しました
echo "Enter peak value"
read peak
awk '/${peak}/{c=3}c&&c--' consolelog.log > testing.txt
しかし、これはうまくいきません。
必ずしもawk、grep、sedなどを使用する必要はありません。ユーザーが入力したパターンと一致し、その後に2行を印刷するだけです。
***アップデート*****私はそれを持って遊んで働くようになりました。これは私が完全に恋しいことです。これが私がすることです。
awk 'c&&!--c;/'$peak'/{c=2}' consolelog.log > testing.txt
答え1
あなたのコード:
echo "Enter peak value"
read peak
awk '/${peak}/{c=3}c&&c--' consolelog.log > testing.txt
二重引用符でシェルが変数拡張を実行できないため、これは機能しません。awk
構文で弱い引用符をたくさん使用して使用するのは非常に難しいので、これは良い方法です。
awk
ただし、スクリプトで環境変数を使用する方法はさまざまです。
独自の変数を宣言できます。
read peak
awk -vpeak="$peak" '$0 ~ peak { c=3 } c&&c--' consolelog.log > testing.txt
または、作成した内容を直接表示することもできますawk
。read
read peak
export peak
awk '$0 ~ ENVIRON["peak"] { c=3 } c&&c--' consolelog.log > testing.txt
答え2
echo "Enter peak value"
read peak
awk '/'"${peak}"'/{c=3}c&&c--' consolelog.log > testing.txt
この試み。
Bash変数を使用する前に、一重引用符を閉じる必要があります。二重引用符で囲むことをお勧めしますawk
。それ以外の場合。