awk検索パターンにシェル変数を渡すには? [コピー]

awk検索パターンにシェル変数を渡すには? [コピー]

私の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

おすすめ記事