以CSV格式减去行

时间:2012-08-13 08:57:06

标签: csv

..我需要修改几个CSV,如下所示......

这就是我所拥有的:

2012-08-13 00:15:15; 768.548
2012-08-13 00:30:15; 768.625
2012-08-13 00:45:15; 768.667
2012-08-13 01:00:15; 768.729
2012-08-13 01:15:15; 768.785
2012-08-13 01:30:15; 768.827

但我的分析需要的是:

2012-08-13 00:15:15; xxx
2012-08-13 00:30:15; 0.077
2012-08-13 00:45:15; 0.042
2012-08-13 01:00:15; 0.062
2012-08-13 01:15:15; 0.056
2012-08-13 01:30:15; 0.042

我需要做的是从上面的行中减去实际行。

我已经做了一些简单的shell脚本来计算这些文件的总和,但从未做过复杂的事情......

还有一个额外的挑战:第一行/值需要从前一天的值中减去另一个CSV。

希望你能帮忙

1 个答案:

答案 0 :(得分:0)

一个小awk脚本怎么样?

awk -F';' 'NR==1 {print $1 "; xxx"}; NR > 1 {print $1 "; " $2 - x} {x=$2}' < your_file.csv

至于第一行(此时它是xxx),我会写一个小shell函数:

get_last_value()
{
## first argument is the filename
    tail -n 1 $1 | cut -d';' -f2
}

然后将上面的代码段修改为

awk -F';' 'NR==1 {print $1 "; " $2 - '$(get_last_value PREVIOUS)'}; NR > 1 {print $1 "; " $2 - x} {x=$2}' THIS_FILE

然后您需要做的就是为每次通话获取PREVIOUSTHIS_FILE的组合。另请注意,必须使用上面未经过处理的代码段处理第一个文件(因为没有以前的值)。