我有一个文件,其中的一部分如下所示:
Date,Open,High
2018-08-29,1624.0,1628.8
2018-08-28,1658.85,1669.55
2018-08-27,1649.0,1655.45
我要做的是创建一个新的列,从上一行的第二列中减去第三列,基本上是1669.55 - 1624.0,依此类推。
这样最终的输出将如下所示:
Date,Open,High,gener
2018-08-29,1624.0,1628.8
2018-08-28,1658.85,1669.55,75.55
2018-08-27,1649.0,1655.45,-3.4
我试过的并不是很聪明,就像这样:
lines=$(cat test.csv|wc-l)
lines=$((lines-2))
for i in $(seq $lines);do
l=$((i+2))
sed -n "$lp" test.csv|awk -F, '{print $2 $3}' >> /dump/files.test
#and then using values from this saved file to make changes within this for loop, using tail etc.
这是非常慢的,我不是很擅长awk。我试图查看手册和每个相关的问题,但在做这样的事情时找不到任何具体的东西。
我也查看了this question that is quite similar,但是我不能让它工作。我尝试阅读有关在awk中使用arrays的内容,但在我的特殊情况下也不是很成功。
这是一个简单的awk解决方案,我会非常欣赏,并提供一个基本的解释。
发布于 2018-08-31 06:16:29
$ awk 'BEGIN{FS=OFS=","} {print $0, (NR>1 ? $3-p : "gener"); p=$2}' file
Date,Open,High,gener
2018-08-29,1624.0,1628.8,1628.8
2018-08-28,1658.85,1669.55,45.55
2018-08-27,1649.0,1655.45,-3.4
https://stackoverflow.com/questions/52105533
复制相似问题