使用awk

时间:2018-08-30 21:22:24

标签: bash awk

我有一个文件,其一部分看起来像这样:

Date,Open,High
2018-08-29,1624.0,1628.8
2018-08-28,1658.85,1669.55
2018-08-27,1649.0,1655.45

我打算做的是通过从上一行的第二列 Open 中减去第三列 High 来创建新列,基本上是 1669.55-1624.0 < / strong>,等等。

使最终输出看起来像:

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解决方案以及一个基本的解释,我将不胜感激。

1 个答案:

答案 0 :(得分:2)

$ 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