我正在尝试汇总每秒到每分钟的数据(取这一分钟内所有值的平均值)。我的数据带有以下形式的时间戳:
date time[h:m:s-03:00],X,value
2016-05-29 15:50:33-03:00,X,561
2016-05-29 15:50:34-03:00,X,565
....
我已经通过以下代码破解了答案,但我希望找到一种更好,更清晰的方法:
awk -F: 'BEGIN{
foo_total=0;
foo=0; }
{
split($4,ar,",");
foo=ar[3];
split($3,a,"-");
if(a[1]~"00"){
first_foo=ar[3]}
if(a[1]!~"00"){
foo_total+=ar[3]}
foo_sum=(first_foo + foo_total);
foo_final=foo_sum/60
if(a[1]~"59") {printf $1":"$2","foo_final"\n"; foo_total=0; first_foo=0;} }' MyFile.csv
非常感谢您的帮助!
答案 0 :(得分:1)
请查看以下Select * From tempdb.INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME LIKE '#yourtemp%'
代码:
awk
您将其作为BEGIN { total = 0; DayHour="Empty"; Min="";}
{
if((DayHour ~ $1) && (Min ~ $2))
{
split($4,a,",");
total += a[3];
}
else
{
if(DayHour !~ "Empty")
print DayHour":"Min, total / 60;
DayHour=$1;
Min=$2;
split($4,a,",");
total = a[3];
}
}
END {print DayHour":"Min, total / 60; }
答案 1 :(得分:1)
基于perl的方法:
$ cat testdata
2016-05-29 15:50:33-03:00,X,561
2016-05-29 15:50:34-03:00,X,565
$ perl -E 'my %arr; my %len;
while(<STDIN>){
m/^(\d{4}-\d{2}-\d{2} \d{2}:\d{2}):\d{2}-03:00,X,([0-9]*)/;
$arr{$1} += $2; $len{$1}++;
}
foreach my $key (sort keys %arr) {
print "$key-03:00,X,". ($arr{$key}/$len{$key}) . "\n";
}' < testdata
2016-05-29 15:50-03:00,X,563
说明:
你可以跳过逻辑和电路的长度部分。硬编码为60.但IMO,记录每分钟的实际参赛人数更安全。