如何使用$()将bash脚本变量传递给AWK并收集输出

时间:2013-10-29 10:19:28

标签: bash awk

问题在于:

solaris:~/src/brk$ cat .file
one xxx 123
two yyy 123

three bbb 321

four xyz 123

脚本:

solaris:~/src/brk$ cat scr.sh
... 
PATH="dist/"
LINE=$(awk '/^[ \t]*$/{next} /^[ \t]*#/{next} {printf $2" "}' .file)
echo "LINE=$LINE"
...

输出:

xxx yyy bbb xyz

我想要以下输出:

dist/xxx dist/yyy dist/bbb dist/xyz

如何修改awk表达式以获得所需的输出?

2 个答案:

答案 0 :(得分:1)

您可以使用awk开关在-v中设置变量:

PATHI="dist/"
LINE=$(awk -v p=$PATHI '/^[ \t]*$/{next} /^[ \t]*#/{next} {printf p$2" "}' .file)

答案 1 :(得分:0)

不要将PATH用作变量名称!那已经被shell使用了。由于这个原因,总是在bash中使用小写变量:shell使用的变量总是大写的。比,您可以将变量传递给awk

dir="dist/"
line=$(awk -v dir=$dir '/^[ \t]*$/{next} /^[ \t]*#/{next} {printf dir$2" "}' .file)