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

时间:2017-09-05 09:23:22

标签: linux bash shell unix

根据以下语法给出包含数字数据的文件:

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

Di是任何正数。 我想输出一个包含

的新文件
D2-D1  
D4-D3  
...  
Dn-Dn-1

使用bash实现此目的的基本方法是什么?

2 个答案:

答案 0 :(得分:2)

拥有此源文件:

$ 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

答案 1 :(得分:1)

GNU awk 解决方案:

示例testfile(假设D前缀是必需的):

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

工作:

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

输出:

1
2
7