0

..我需要修改几个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 中的值。

希望你能帮忙

4

1 回答 1

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

然后你需要做的就是为每个调用获取PREVIOUS和的组合。THIS_FILE另请注意,必须使用上面未调整的代码段处理第一个文件(因为没有先前的值)。

于 2012-08-13T09:40:05.707 回答