如何在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
是将骑乘手侧添加到左手侧并将结果存储在左手侧并返回新值的操作员。我将变量+=
命名为“sum”$s
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