使用bash对文件进行算术运算

给定一个包含数值数据的文件,语法如下:

D1 D2 -- D3 D4 -- ... -- Dn-1 Dn 

哪里是任何正数。 我想输出一个新的文件包含

 D2-D1 D4-D3 ... Dn-Dn-1 

使用bash实现这个的基本方法是什么?

有这个源文件:

 $ cat source 3 7 -- 9 14 -- 9 3 

使用awk (更好的工具来完成这个任务):

 awk '{print $2+0-$1+0}' RS='--' source > target 

结果:

 $ cat target 4 5 -6 

如果你想坚持bash

 flag=0 while IFS='' read -r num; do if [ $flag -eq 0 ]; then d1=$num flag=1 continue fi if [ $num = "--" ];then flag=0 continue fi (( num -= d1)) echo $num done < source > target 

GNU awk解决方案:

示例测试文件(假设D前缀是必需的):

 D2 D3 -- D3 D5 -- D3 D10 -- 

工作:

 awk -v RS='--' -v FPAT='[0-9]+' 'NF{print $2-$1}' file 

输出:

 1 2 7