这是我的剧本:
for i in *.locs
do
awk -v start=$(head -n 1 ${i}) -v end=$(tail -n 1 ${i})
BEGIN {
sum = 0;
count = 0;
range_start = -1;
range_end = -1;
}
{
irow = int($1)
ival = $2 + 0.0
if (irow >= start && end >= irow) {
if (range_start == -1) {
range_start = NR;
}
sum = sum + ival;
count++;
}
else if (irow > end) {
if (range_end == -1) {
range_end = NR - 1;
}
}
}
END {
echo "${i}"
print "start =", range_start, "end =", range_end, "mean =", sum / count
}
done
这给了我这个错误:
第15行:意外令牌附近的语法错误`}'
第15行:'}'
但是当我第一次使用awk生成变量start和end后跟-f myscript.sh文件
我没有收到错误:
我错过了什么?
提前致谢
答案 0 :(得分:2)
您需要引用整个awk
脚本,或者转义美元符号,以便shell在调用awk
之前不会将它们展开为位置参数。 (添加单引号会解决另一个问题,即没有行继续符,awk
命令本身在行尾结束,脚本的其余部分被解析为不正确bash
代码):
awk -v start=$(head -n 1 ${i}) -v end=$(tail -n 1 ${i}) '
BEGIN {
...
'
答案 1 :(得分:0)
awk程序中的字符由shell解释。您可以将程序作为命令行参数传递给awk,但必须将其括在“单引号”中以防止shell解释它。