Bash 带变量的算术表达式
Bash arithmetic expression with variable
我正在编写一个小 bash 脚本来处理我的数据。
在部分脚本中,我需要使用原始数据中存在的数据来生成新值。
但是,我写的脚本不起作用。
终端报如下错误
")0.192500rror:无效的算术运算符(错误标记为“
每个变量的值为:
inc= 0.0200000, str= -0.192500, pts= 1024,
我的脚本如下:
for i in *.TXT; do
inc=$(sed -n '/^#XPERCHAN/ p' $i | sed 's/[A-Z:# ]//g')
str=$(sed -n '/^#OFFSET/ p' $i | sed 's/[A-Z:# ]//g')
pts=$(sed -n '/^#NPOINTS/ p' $i | sed 's/[A-Z:# .]//g')
lst=$(( ($pts-1)*$inc+$str))
echo $lst
done
请帮帮我。谢谢!
bash
只知道整数。对浮点数使用 bc
或更高级的编程语言。
lst=$(echo "($pts - 1) * $inc + $str" | bc)
编辑: 如果您的文件格式与我认为的一样 (#XPERCHAN: 0.0200000
),您可以一次完成所有操作 awk
:
lst=$(awk '/^#XPERCHAN/ { inc= } /^#OFFSET/ { str= } /^#NPOINTS/ { pts= } END { print ((pts + 1) * inc + str) }' $i)
我正在编写一个小 bash 脚本来处理我的数据。
在部分脚本中,我需要使用原始数据中存在的数据来生成新值。
但是,我写的脚本不起作用。
终端报如下错误
")0.192500rror:无效的算术运算符(错误标记为“
每个变量的值为: inc= 0.0200000, str= -0.192500, pts= 1024,
我的脚本如下:
for i in *.TXT; do
inc=$(sed -n '/^#XPERCHAN/ p' $i | sed 's/[A-Z:# ]//g')
str=$(sed -n '/^#OFFSET/ p' $i | sed 's/[A-Z:# ]//g')
pts=$(sed -n '/^#NPOINTS/ p' $i | sed 's/[A-Z:# .]//g')
lst=$(( ($pts-1)*$inc+$str))
echo $lst
done
请帮帮我。谢谢!
bash
只知道整数。对浮点数使用 bc
或更高级的编程语言。
lst=$(echo "($pts - 1) * $inc + $str" | bc)
编辑: 如果您的文件格式与我认为的一样 (#XPERCHAN: 0.0200000
),您可以一次完成所有操作 awk
:
lst=$(awk '/^#XPERCHAN/ { inc= } /^#OFFSET/ { str= } /^#NPOINTS/ { pts= } END { print ((pts + 1) * inc + str) }' $i)