Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在bash和/或使用awk的单个列中进行数学运算?_Bash_Math_Awk - Fatal编程技术网

如何在bash和/或使用awk的单个列中进行数学运算?

如何在bash和/或使用awk的单个列中进行数学运算?,bash,math,awk,Bash,Math,Awk,我有一列由以下几行组成: 20.000 15.000 42.500 42.500 45.000 45.000 50.000 50.000 50.000 50.000 50.000 50.000 50.000 50.000 50.000 我需要得到一个文件,其中: 第一个元素是20/2 第二个元素是前一个值+15/2 第三个元素是之前的值+42.5/2 等等,直到最后 我的问题是如何进行“循环”。Perl来拯救: perl -lne 'print $s += $_ / 2' input-file

我有一列由以下几行组成:

20.000
15.000
42.500
42.500
45.000
45.000
50.000
50.000
50.000
50.000
50.000
50.000
50.000
50.000
50.000
我需要得到一个文件,其中:

第一个元素是20/2

第二个元素是前一个值+15/2

第三个元素是之前的值+42.5/2

等等,直到最后

我的问题是如何进行“循环”。

Perl来拯救:

perl -lne 'print $s += $_ / 2' input-file > output-file
  • -l
    从输入中删除换行符并将其添加到输出中
  • -n
    逐行读取输入,为每个行执行代码
  • $是从每行读取的值
  • /2
    被2除
  • +=
    是将骑乘手侧添加到左手侧并将结果存储在左手侧并返回新值的操作员。我将变量
    $s
    命名为“sum”

我想您需要输出为一行:

awk '{s+=$1/2; out = out s " ";} END{print out}' file
#=> 10 17.5 38.75 60 82.5 105 130 155 180 205 230 255 280 305 330
最后有一个额外的空间,我认为没有坏处。
如果不需要,可以将其删除。

试试这个:

awk '{prev += ($0) / 2; printf("%.3f\n", prev);}' a2.txt 

输入:

20.000
15.000
42.500
42.500
45.000
45.000
50.000
50.000
50.000
50.000
50.000
50.000
50.000
50.000
50.000

输出:



我想您可能正在为
循环寻找

awk '{for (i = 1; i <= NF; i++) print  temp = temp + $i/2  }' filename
简单地说

$ awk '{print v+=$1/2}' file

10
17.5
38.75
60
82.5
105
130
155
180
205
230
255
280
305
330
如果需要,您可以设置
printf
格式设置

这是将总计aka滚动总和乘以2。
awk -F ":" '{}' filename
$ awk '{print v+=$1/2}' file

10
17.5
38.75
60
82.5
105
130
155
180
205
230
255
280
305
330