我有一列这样的几行:
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
以此类推,直到最后
我的问题是如何进行“循环”。
答案 0 :(得分:3)
抢救Perl:
perl -lne 'print $s += $_ / 2' input-file > output-file
-l
从输入中删除换行符并将其添加到输出中-n
逐行读取输入,对每个输入执行代码$_
是从每一行读取的值/ 2
除以2 +=
是将其乘车手侧添加到其左侧的操作员,并将结果存储在左侧,并返回新值。我将变量$s
命名为“ sum”。答案 1 :(得分:1)
尝试一下:
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
输出:
10.000
17.500
38.750
60.000
82.500
105.000
130.000
155.000
180.000
205.000
230.000
255.000
280.000
305.000
330.000
答案 2 :(得分:1)
简单
$ 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
格式
答案 3 :(得分:0)
我想您需要将输出作为一行:
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
我认为最后没有多余的空格。
您可以删除它。
答案 4 :(得分:0)