嗨,我有一个剧本,内容如下

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)。。
非常感谢您的帮助。

最佳答案

Bash不替换单引号字符串中的变量。
任何检查你所做事情的简单方法都是:

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

有几种方法可以达到你想要的目的,这一种似乎很有可读性:
awk '/"'$line'"/,/\/>/{printf "%s ",$0}/\/>/{print ""}'

关于linux - awk中的用户定义变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18244376/

10-16 20:27