awk 计算与最后一行的差异并创建具有值的新列

awk calculate the difference with last row and create new column with value

我有这样一个文件:

time,VALUE
2022-02-02 00:00:39,57
2022-02-02 00:01:39,58
2022-02-02 00:02:39,59
2022-02-02 00:03:39,59
2022-02-02 00:04:40,62
2022-02-02 00:05:40,60

我想(也许更好的选择是 awk)创建一个新列来计算与最后一行的差异。示例:

time,VALUE,Diff
2022-02-02 00:00:39,57,0
2022-02-02 00:01:39,58,1
2022-02-02 00:02:39,59,1
2022-02-02 00:03:39,59,0
2022-02-02 00:04:40,62,3
2022-02-02 00:05:40,60,-2

我有这个小脚本 awk 'NR==1{s=;next}{print -s;s=}' 但我不知道如何轻松地添加一个包含结果的新列并为第一行添加一个“0”

谢谢

您可以为前两行定义特殊规则

awk -F "," -v OFS="," 'NR==1{print [=10=],"Diff"} 
                       NR==2{print [=10=],0} 
                       NR>2{print [=10=],-last} {last=}' file
time,VALUE,Diff
2022-02-02 00:00:39,57,0
2022-02-02 00:01:39,58,1
2022-02-02 00:02:39,59,1
2022-02-02 00:03:39,59,0
2022-02-02 00:04:40,62,3
2022-02-02 00:05:40,60,-2

另一个awk想法:

awk '
BEGIN {FS=OFS=","}
NR==1 {print [=10=],"Diff"; next}
      {print [=10=],(NR==2 ? 0 : -last); last=}
' file

这会生成:

time,VALUE,Diff
2022-02-02 00:00:39,57,0
2022-02-02 00:01:39,58,1
2022-02-02 00:02:39,59,1
2022-02-02 00:03:39,59,0
2022-02-02 00:04:40,62,3
2022-02-02 00:05:40,60,-2