用户在awk中定义的变量

时间:2013-08-15 00:13:32

标签: linux shell sed awk

嗨我有一个内容低于内容的脚本

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)..

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

Bash不会在单引号字符串中替换变量。

检查您正在做的事情的任何简单方法是:

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

有几种方法可以达到你想要的效果,这个方法看起来很可读:

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