awk中不能解析shell变量,建议做法是通过-v传递进去:
1
|
typeline=`
cat
$typepath |
awk
-
v
str=
"$typetmp"
'/str/{print NR}'
`
|
第一句之所以在awk中可以直接使用shell变量$line,是因为用的双引号。
从执行效率上来说,你的写法其实太过累赘,下面是改良版:
1
2
|
typetmp=`
awk
-F
":"
-
v
n=$line
'NR==n{print $1}'
$paratmppath`
typeline=`
sed
-n
'/'
"$typetmp"
'/='
$typepath`
|
这里用sed来获取行号。
第一句,cut能做的awk也能做,直接在一个awk里完成就行。
awk和sed本身就是直接对文件的处理,用不着先cat再通过管道传递过来处理。
"$typetmp"前面的单引号用于跟一开始的单引号凑成一对,关闭sed作用域回到shell环境中,使得shell可以解析此变量,然后重新用单引号再次进入sed作用域。等于将sed作用域从中间分割开了。