私のbashスクリプトには、awkを使用して検索するためにパターンに渡したい変数があります。しかし、私が起こると予想したことは起こりませんでした。次のテキストファイル(text.txt)があります。
-----------
Task: a
(some info)
....
------------
Task: b
(some info)
....
------------
Task: c
(some info)
....
------------
私のスクリプトの内容は次のとおりです。
letter=a
awk -v var="$letter" '/Task .* \var/' RS='-+' text.txt
しかし、これを行うと、次以外は何も得られません。
awk '/Task .* a/' RS='-+' text.txt
私は私が期待したものを得ます:
Task: a
(some info)
....
メモ:私が探している変数を変更し続けるループがあるので、それを変数に渡す必要があります。私はawkを使用するほうが私に最も慣れているので好むが、sedやgrepのような他の提案を聞くことに反対するわけではない。
ベストアンサー1
パターン全体をawkに渡すことができます
letter=a
awk -v pattern="Task .* $letter" -v RS='-+' '
$0 ~ pattern
' text.txt
または、awk でパターンを文字列として整理します。
letter=a
awk -v ltr="$letter" -v RS='-+' '
BEGIN {pattern = "Task .* " ltr}
$0 ~ pattern
' text.txt
awk変数にはプレフィックスがないため、$
変数に含めることはできません。/regex constant/
変数はその中にあるテキストだけです。
(私は最初にすべてのawk変数を入れる傾向があります-v
)