..我需要修改几个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。
希望你能帮忙
答案 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
然后您需要做的就是为每次通话获取PREVIOUS
和THIS_FILE
的组合。另请注意,必须使用上面未经过处理的代码段处理第一个文件(因为没有以前的值)。