0

こんにちは、以下の内容のスクリプトがあります

line="17"

awk '/$line/,/\/>/{printf "%s ",$0}/\/>/{print ""}' out.txt > temp.txt

cat temp.txt

出力は表示されませんが、クエリの下では必要な結果が得られます

awk '/"17"/,/\/>/{printf "%s ",$0}/\/>/{print ""}' out.txt > temp.txt

以下のように awk 内部スクリプトをさまざまな方法で使用しましたが、使用しません

awk -v xyz="$line" '/xyz/,/\/>/{printf "%s ",$0}/\/>/{print ""}' out.txt > temp.txt
awk  "/$line/,/\/>/{printf '%s ',$0}/\/>/{print ''}" out.txt > temp.txt

そして、 $line との完全な一致とともに同じことを実現する方法はありますか ( grep -w $line など)。

どんな助けでも大歓迎です。

4

1 に答える 1

3

Bash は、一重引用符で囲まれた文字列内の変数を置き換えません。

あなたが何をしているかを確認する簡単な方法は次のとおりです。

echo '/$line/,/\/>/{printf "%s ",$0}/\/>/{print ""}'

あなたが望むものを達成する方法はいくつかありますが、これは非常に読みやすいようです:

awk '/"'$line'"/,/\/>/{printf "%s ",$0}/\/>/{print ""}'
于 2013-08-15T00:22:51.957 に答える