嗨,我有一个剧本,内容如下
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/