在缺少的文件行中插入空值

时间:2016-03-08 06:55:48

标签: perl date datetime awk

我有一个文本文件,其中包含以10分钟为间隔隔离的24小时时间戳的一些数据。

logstash-2.2.2> bin/plugin pack
logstash-2.2.2> bin/plugin unpack plugins_package.tar.gz
logstash-2.2.2> bin/plugin install --local logstash-filter-grok

如果您按照10分钟的时间间隔看到上面的示例,则此文件中的24小时内总共应有143行,但在第二行最后一行有2016-02-06,00:00:00,ujjawal,36072-2,MT,37,0,1 2016-02-06,00:10:00,ujjawal,36072-2,MT,37,0,1 2016-02-06,00:20:00,ujjawal,36072-2,MT,37,0,1 2016-02-06,00:40:00,ujjawal,36072-2,MT,37,0,1 2016-02-06,00:50:00,ujjawal,36072-2,MT,42,0,2 2016-02-06,01:00:00,ujjawal,36072-2,MT,55,0,2 2016-02-06,01:10:00,ujjawal,36072-2,MT,41,0,2 2016-02-06,01:20:00,ujjawal,36072-2,MT,46,0,2 2016-02-06,01:30:00,ujjawal,36072-2,MT,56,0,3 2016-02-06,01:40:00,ujjawal,36072-2,MT,38,0,2 2016-02-06,01:50:00,ujjawal,36072-2,MT,49,0,2 2016-02-06,02:00:00,ujjawal,36072-2,MT,58,0,4 2016-02-06,02:10:00,ujjawal,36072-2,MT,43,0,2 2016-02-06,02:20:00,ujjawal,36072-2,MT,46,0,2 2016-02-06,02:30:00,ujjawal,36072-2,MT,61,0,2 2016-02-06,02:40:00,ujjawal,36072-2,MT,57,0,3 2016-02-06,02:50:00,ujjawal,36072-2,MT,45,0,2 2016-02-06,03:00:00,ujjawal,36072-2,MT,45,0,3 2016-02-06,03:10:00,ujjawal,36072-2,MT,51,0,2 2016-02-06,03:20:00,ujjawal,36072-2,MT,68,0,3 2016-02-06,03:30:00,ujjawal,36072-2,MT,51,0,2 2016-02-06,03:40:00,ujjawal,36072-2,MT,68,0,3 2016-02-06,03:50:00,ujjawal,36072-2,MT,67,0,3 2016-02-06,04:00:00,ujjawal,36072-2,MT,82,0,8 2016-02-06,04:10:00,ujjawal,36072-2,MT,82,0,5 2016-02-06,04:20:00,ujjawal,36072-2,MT,122,0,4 2016-02-06,04:30:00,ujjawal,36072-2,MT,133,0,3 2016-02-06,04:40:00,ujjawal,36072-2,MT,142,0,3 2016-02-06,04:50:00,ujjawal,36072-2,MT,202,0,1 2016-02-06,05:00:00,ujjawal,36072-2,MT,731,1,3 2016-02-06,05:10:00,ujjawal,36072-2,MT,372,0,7 2016-02-06,05:20:00,ujjawal,36072-2,MT,303,0,2 2016-02-06,05:30:00,ujjawal,36072-2,MT,389,0,3 2016-02-06,05:40:00,ujjawal,36072-2,MT,454,0,1 2016-02-06,05:50:00,ujjawal,36072-2,MT,406,0,6 2016-02-06,06:00:00,ujjawal,36072-2,MT,377,0,1 2016-02-06,06:10:00,ujjawal,36072-2,MT,343,0,5 2016-02-06,06:20:00,ujjawal,36072-2,MT,370,0,2 2016-02-06,06:30:00,ujjawal,36072-2,MT,343,0,9 2016-02-06,06:40:00,ujjawal,36072-2,MT,315,0,8 2016-02-06,06:50:00,ujjawal,36072-2,MT,458,0,3 2016-02-06,07:00:00,ujjawal,36072-2,MT,756,1,3 2016-02-06,07:10:00,ujjawal,36072-2,MT,913,1,3 2016-02-06,07:20:00,ujjawal,36072-2,MT,522,0,3 2016-02-06,07:30:00,ujjawal,36072-2,MT,350,0,7 2016-02-06,07:40:00,ujjawal,36072-2,MT,328,0,6 2016-02-06,07:50:00,ujjawal,36072-2,MT,775,1,3 2016-02-06,08:00:00,ujjawal,36072-2,MT,310,0,9 2016-02-06,08:10:00,ujjawal,36072-2,MT,308,0,6 2016-02-06,08:20:00,ujjawal,36072-2,MT,738,1,3 2016-02-06,08:30:00,ujjawal,36072-2,MT,294,0,6 2016-02-06,08:40:00,ujjawal,36072-2,MT,345,0,1 2016-02-06,08:50:00,ujjawal,36072-2,MT,367,0,6 2016-02-06,09:00:00,ujjawal,36072-2,MT,480,0,3 2016-02-06,09:10:00,ujjawal,36072-2,MT,390,0,3 2016-02-06,09:20:00,ujjawal,36072-2,MT,436,0,3 2016-02-06,09:30:00,ujjawal,36072-2,MT,1404,2,3 2016-02-06,09:40:00,ujjawal,36072-2,MT,346,0,3 2016-02-06,09:50:00,ujjawal,36072-2,MT,388,0,3 2016-02-06,10:00:00,ujjawal,36072-2,MT,456,0,2 2016-02-06,10:10:00,ujjawal,36072-2,MT,273,0,7 2016-02-06,10:20:00,ujjawal,36072-2,MT,310,0,3 2016-02-06,10:30:00,ujjawal,36072-2,MT,256,0,7 2016-02-06,10:40:00,ujjawal,36072-2,MT,283,0,3 2016-02-06,10:50:00,ujjawal,36072-2,MT,276,0,3 2016-02-06,11:00:00,ujjawal,36072-2,MT,305,0,1 2016-02-06,11:10:00,ujjawal,36072-2,MT,310,0,9 2016-02-06,11:20:00,ujjawal,36072-2,MT,286,0,3 2016-02-06,11:30:00,ujjawal,36072-2,MT,286,0,3 2016-02-06,11:40:00,ujjawal,36072-2,MT,247,0,7 2016-02-06,11:50:00,ujjawal,36072-2,MT,366,0,2 2016-02-06,12:00:00,ujjawal,36072-2,MT,294,0,2 2016-02-06,12:10:00,ujjawal,36072-2,MT,216,0,5 2016-02-06,12:20:00,ujjawal,36072-2,MT,233,0,1 2016-02-06,12:30:00,ujjawal,36072-2,MT,785,1,2 2016-02-06,12:40:00,ujjawal,36072-2,MT,466,0,1 2016-02-06,12:50:00,ujjawal,36072-2,MT,219,0,9 2016-02-06,13:00:00,ujjawal,36072-2,MT,248,0,6 2016-02-06,13:10:00,ujjawal,36072-2,MT,223,0,7 2016-02-06,13:20:00,ujjawal,36072-2,MT,276,0,8 2016-02-06,13:30:00,ujjawal,36072-2,MT,219,0,6 2016-02-06,13:40:00,ujjawal,36072-2,MT,699,1,2 2016-02-06,13:50:00,ujjawal,36072-2,MT,439,0,2 2016-02-06,14:00:00,ujjawal,36072-2,MT,1752,2,3 2016-02-06,14:10:00,ujjawal,36072-2,MT,203,0,5 2016-02-06,14:20:00,ujjawal,36072-2,MT,230,0,7 2016-02-06,14:30:00,ujjawal,36072-2,MT,226,0,1 2016-02-06,14:40:00,ujjawal,36072-2,MT,195,0,6 2016-02-06,14:50:00,ujjawal,36072-2,MT,314,0,1 2016-02-06,15:00:00,ujjawal,36072-2,MT,357,0,2 2016-02-06,15:10:00,ujjawal,36072-2,MT,387,0,9 2016-02-06,15:20:00,ujjawal,36072-2,MT,1084,1,3 2016-02-06,15:30:00,ujjawal,36072-2,MT,1295,2,3 2016-02-06,15:40:00,ujjawal,36072-2,MT,223,0,8 2016-02-06,15:50:00,ujjawal,36072-2,MT,254,0,1 2016-02-06,16:00:00,ujjawal,36072-2,MT,252,0,7 2016-02-06,16:10:00,ujjawal,36072-2,MT,268,0,1 2016-02-06,16:20:00,ujjawal,36072-2,MT,242,0,1 2016-02-06,16:30:00,ujjawal,36072-2,MT,254,0,9 2016-02-06,16:40:00,ujjawal,36072-2,MT,271,0,3 2016-02-06,16:50:00,ujjawal,36072-2,MT,244,0,7 2016-02-06,17:00:00,ujjawal,36072-2,MT,281,0,1 2016-02-06,17:10:00,ujjawal,36072-2,MT,190,0,8 2016-02-06,17:20:00,ujjawal,36072-2,MT,187,0,1 2016-02-06,17:30:00,ujjawal,36072-2,MT,173,0,9 2016-02-06,17:40:00,ujjawal,36072-2,MT,140,0,5 2016-02-06,17:50:00,ujjawal,36072-2,MT,147,0,6 2016-02-06,18:00:00,ujjawal,36072-2,MT,109,0,4 2016-02-06,18:10:00,ujjawal,36072-2,MT,99,0,1 2016-02-06,18:20:00,ujjawal,36072-2,MT,66,0,6 2016-02-06,18:30:00,ujjawal,36072-2,MT,67,0,4 2016-02-06,18:40:00,ujjawal,36072-2,MT,40,0,2 2016-02-06,18:50:00,ujjawal,36072-2,MT,52,0,3 2016-02-06,19:00:00,ujjawal,36072-2,MT,40,0,3 2016-02-06,19:10:00,ujjawal,36072-2,MT,30,0,2 2016-02-06,19:20:00,ujjawal,36072-2,MT,25,0,3 2016-02-06,19:30:00,ujjawal,36072-2,MT,35,0,4 2016-02-06,19:40:00,ujjawal,36072-2,MT,14,0,1 2016-02-06,19:50:00,ujjawal,36072-2,MT,97,0,7 2016-02-06,20:00:00,ujjawal,36072-2,MT,14,0,1 2016-02-06,20:10:00,ujjawal,36072-2,MT,12,0,4 2016-02-06,20:20:00,ujjawal,36072-2,MT,11,0,2 2016-02-06,20:30:00,ujjawal,36072-2,MT,12,0,1 2016-02-06,20:40:00,ujjawal,36072-2,MT,6,0,1 2016-02-06,20:50:00,ujjawal,36072-2,MT,13,0,2 2016-02-06,21:00:00,ujjawal,36072-2,MT,5,0,1 2016-02-06,21:10:00,ujjawal,36072-2,MT,12,0,2 2016-02-06,21:20:00,ujjawal,36072-2,MT,1,0,1 2016-02-06,21:30:00,ujjawal,36072-2,MT,21,0,2 2016-02-06,21:50:00,ujjawal,36072-2,MT,9,0,3 2016-02-06,22:00:00,ujjawal,36072-2,MT,2,0,1 2016-02-06,22:10:00,ujjawal,36072-2,MT,12,0,5 2016-02-06,22:20:00,ujjawal,36072-2,MT,1,0,1 2016-02-06,22:30:00,ujjawal,36072-2,MT,9,0,1 2016-02-06,22:40:00,ujjawal,36072-2,MT,13,0,1 2016-02-06,23:00:00,ujjawal,36072-2,MT,20,0,2 2016-02-06,23:10:00,ujjawal,36072-2,MT,10,0,3 2016-02-06,23:20:00,ujjawal,36072-2,MT,10,0,1 2016-02-06,23:30:00,ujjawal,36072-2,MT,6,0,1 2016-02-06,23:40:00,ujjawal,36072-2,MT,12,0,1 个数据的日期之后,缺少时间2016-02-06,23:40:00

类似于日期的2016-02-06,23:50:00数据后,缺少时间2016-02-06,22:40:00

我们可以插入缺少的日期,时间后跟6以逗号分隔的空格,例如2016-02-06,22:50:00此文件的行中是否有任何数据丢失,基于计数没有143行和时间戳比较行2016-02-06,22:50:00,null,null,null,null,null,null2016-02-06,00:00:00,这也是计数中的143?

这是我尝试过的 创建了一个包含143个日期和时间条目的文件,作为2.csv,并在命令

下使用
2016-02-06,23:50:00

输出的一部分是重复的,如下所示:

join -j 2 -o 1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,2.1,2.1,2.2 <(sort -k2 1.csv) <(sort -k2 2.csv)|grep "2016-02-06,21:30:00"| sort -u|sed "s/\t//g"> 3.txt

有什么建议吗?

5 个答案:

答案 0 :(得分:1)

我实际上交叉引用新的csv文件,而是这样做:

#!/usr/bin/env perl
use strict;
use warnings;
use Time::Piece; 

my $last_timestamp; 
my $interval = 600; 

#read stdin line by line
while ( <> ) {
   #extract date and time from this line. 
   my ( $date, $time, @fields ) = split /,/; 
   #parse the timestamp
   my $timestamp = Time::Piece -> strptime ( $date . $time, "%Y-%m-%d%H:%M:%S" );
   #set last if undefined. 
   $last_timestamp //= $timestamp; 
   #if there's a gap... :
   if (  $last_timestamp + $interval <  $timestamp ) { 
       #print "GAP detected at $timestamp: ",$timestamp - $last_timestamp,"\n";
       #print lines to fill in the gap
       for ( ($timestamp - $last_timestamp) % 600 ) { 
           $last_timestamp += 600;
           print join ( ",", $last_timestamp -> strftime("%Y-%m-%d,%H:%M:%S"),  ("null")x6),"\n";
       }
   }
   $last_timestamp = $timestamp;
   print;
}

为您的样本提供了线条(为简洁起见):

2016-02-06,22:40:00,ujjawal,36072-2,MT,13,0,1
2016-02-06,22:50:00,null,null,null,null,null,null
2016-02-06,23:00:00,ujjawal,36072-2,MT,20,0,2

注意 - 假设时间戳恰好相隔600秒。如果这不是一个有效的假设,你可以稍微调整一下逻辑,但这完全取决于你在那一点上想要得到的东西。

答案 1 :(得分:0)

这是答案..

cat 1.csv 2.csv | sort -u -t,-k2,2

答案 2 :(得分:0)

...或shell脚本:

#! /bin/bash
set -e

file=$1
today=$(head -1 $file | cut -d, -f1)

line=0
for (( h = 0 ; h < 24 ; h++ ))
do
  for (( m = 0 ; m < 60 ; m += 10 ))
  do
    stamp=$(printf "%02d:%02d:00" $h $m)
    if [ $line -eq 0 ]; then IFS=',' read date time data; fi
    if [ "$time" = "$stamp" ]; then
      echo $date,$time,$data
      line=0
    else
      echo $today,$stamp,null,null,null,null,null,null
      line=1
    fi
  done
done <$file

答案 3 :(得分:0)

我会在Perl

中这样写

此程序需要输入文件的名称作为命令行上的参数,并将其输出打印到STDOUT,可以将其重定向为正常

use strict;
use warnings 'all';
use feature 'say';

use Time::Piece;
use Time::Seconds 'ONE_MINUTE';

my $format = '%Y-%m-%d,%H:%M:%S';
my $delta = 10 * ONE_MINUTE;

my $next;

our @ARGV = 'mydates.txt';

while ( <> ) {

    my $new = Time::Piece->strptime(/^([\d-]+,[\d:]+)/, $format);

    while ( $next and $next < $new ) {
        say $next->strftime($format) . ',null' x 6;
        $next += $delta;
    }

    print;

    $next = $new + $delta;
}

while ( $next and $next->hms('') > 0 ) {
    say $next->strftime($format) . ',null' x 6;
    $next += $delta;
}

输出

2016-02-06,00:00:00,ujjawal,36072-2,MT,37,0,1
2016-02-06,00:10:00,ujjawal,36072-2,MT,37,0,1
2016-02-06,00:20:00,ujjawal,36072-2,MT,37,0,1
2016-02-06,00:30:00,null,null,null,null,null,null
2016-02-06,00:40:00,ujjawal,36072-2,MT,37,0,1
2016-02-06,00:50:00,ujjawal,36072-2,MT,42,0,2
2016-02-06,01:00:00,ujjawal,36072-2,MT,55,0,2
2016-02-06,01:10:00,ujjawal,36072-2,MT,41,0,2
2016-02-06,01:20:00,ujjawal,36072-2,MT,46,0,2
2016-02-06,01:30:00,ujjawal,36072-2,MT,56,0,3
2016-02-06,01:40:00,ujjawal,36072-2,MT,38,0,2
2016-02-06,01:50:00,ujjawal,36072-2,MT,49,0,2
2016-02-06,02:00:00,ujjawal,36072-2,MT,58,0,4
2016-02-06,02:10:00,ujjawal,36072-2,MT,43,0,2
2016-02-06,02:20:00,ujjawal,36072-2,MT,46,0,2
2016-02-06,02:30:00,ujjawal,36072-2,MT,61,0,2
2016-02-06,02:40:00,ujjawal,36072-2,MT,57,0,3
2016-02-06,02:50:00,ujjawal,36072-2,MT,45,0,2
2016-02-06,03:00:00,ujjawal,36072-2,MT,45,0,3
2016-02-06,03:10:00,ujjawal,36072-2,MT,51,0,2
2016-02-06,03:20:00,ujjawal,36072-2,MT,68,0,3
2016-02-06,03:30:00,ujjawal,36072-2,MT,51,0,2
2016-02-06,03:40:00,ujjawal,36072-2,MT,68,0,3
2016-02-06,03:50:00,ujjawal,36072-2,MT,67,0,3
2016-02-06,04:00:00,ujjawal,36072-2,MT,82,0,8
2016-02-06,04:10:00,ujjawal,36072-2,MT,82,0,5
2016-02-06,04:20:00,ujjawal,36072-2,MT,122,0,4
2016-02-06,04:30:00,ujjawal,36072-2,MT,133,0,3
2016-02-06,04:40:00,ujjawal,36072-2,MT,142,0,3
2016-02-06,04:50:00,ujjawal,36072-2,MT,202,0,1
2016-02-06,05:00:00,ujjawal,36072-2,MT,731,1,3
2016-02-06,05:10:00,ujjawal,36072-2,MT,372,0,7
2016-02-06,05:20:00,ujjawal,36072-2,MT,303,0,2
2016-02-06,05:30:00,ujjawal,36072-2,MT,389,0,3
2016-02-06,05:40:00,ujjawal,36072-2,MT,454,0,1
2016-02-06,05:50:00,ujjawal,36072-2,MT,406,0,6
2016-02-06,06:00:00,ujjawal,36072-2,MT,377,0,1
2016-02-06,06:10:00,ujjawal,36072-2,MT,343,0,5
2016-02-06,06:20:00,ujjawal,36072-2,MT,370,0,2
2016-02-06,06:30:00,ujjawal,36072-2,MT,343,0,9
2016-02-06,06:40:00,ujjawal,36072-2,MT,315,0,8
2016-02-06,06:50:00,ujjawal,36072-2,MT,458,0,3
2016-02-06,07:00:00,ujjawal,36072-2,MT,756,1,3
2016-02-06,07:10:00,ujjawal,36072-2,MT,913,1,3
2016-02-06,07:20:00,ujjawal,36072-2,MT,522,0,3
2016-02-06,07:30:00,ujjawal,36072-2,MT,350,0,7
2016-02-06,07:40:00,ujjawal,36072-2,MT,328,0,6
2016-02-06,07:50:00,ujjawal,36072-2,MT,775,1,3
2016-02-06,08:00:00,ujjawal,36072-2,MT,310,0,9
2016-02-06,08:10:00,ujjawal,36072-2,MT,308,0,6
2016-02-06,08:20:00,ujjawal,36072-2,MT,738,1,3
2016-02-06,08:30:00,ujjawal,36072-2,MT,294,0,6
2016-02-06,08:40:00,ujjawal,36072-2,MT,345,0,1
2016-02-06,08:50:00,ujjawal,36072-2,MT,367,0,6
2016-02-06,09:00:00,ujjawal,36072-2,MT,480,0,3
2016-02-06,09:10:00,ujjawal,36072-2,MT,390,0,3
2016-02-06,09:20:00,ujjawal,36072-2,MT,436,0,3
2016-02-06,09:30:00,ujjawal,36072-2,MT,1404,2,3
2016-02-06,09:40:00,ujjawal,36072-2,MT,346,0,3
2016-02-06,09:50:00,ujjawal,36072-2,MT,388,0,3
2016-02-06,10:00:00,ujjawal,36072-2,MT,456,0,2
2016-02-06,10:10:00,ujjawal,36072-2,MT,273,0,7
2016-02-06,10:20:00,ujjawal,36072-2,MT,310,0,3
2016-02-06,10:30:00,ujjawal,36072-2,MT,256,0,7
2016-02-06,10:40:00,ujjawal,36072-2,MT,283,0,3
2016-02-06,10:50:00,ujjawal,36072-2,MT,276,0,3
2016-02-06,11:00:00,ujjawal,36072-2,MT,305,0,1
2016-02-06,11:10:00,ujjawal,36072-2,MT,310,0,9
2016-02-06,11:20:00,ujjawal,36072-2,MT,286,0,3
2016-02-06,11:30:00,ujjawal,36072-2,MT,286,0,3
2016-02-06,11:40:00,ujjawal,36072-2,MT,247,0,7
2016-02-06,11:50:00,ujjawal,36072-2,MT,366,0,2
2016-02-06,12:00:00,ujjawal,36072-2,MT,294,0,2
2016-02-06,12:10:00,ujjawal,36072-2,MT,216,0,5
2016-02-06,12:20:00,ujjawal,36072-2,MT,233,0,1
2016-02-06,12:30:00,ujjawal,36072-2,MT,785,1,2
2016-02-06,12:40:00,ujjawal,36072-2,MT,466,0,1
2016-02-06,12:50:00,ujjawal,36072-2,MT,219,0,9
2016-02-06,13:00:00,ujjawal,36072-2,MT,248,0,6
2016-02-06,13:10:00,ujjawal,36072-2,MT,223,0,7
2016-02-06,13:20:00,ujjawal,36072-2,MT,276,0,8
2016-02-06,13:30:00,ujjawal,36072-2,MT,219,0,6
2016-02-06,13:40:00,ujjawal,36072-2,MT,699,1,2
2016-02-06,13:50:00,ujjawal,36072-2,MT,439,0,2
2016-02-06,14:00:00,ujjawal,36072-2,MT,1752,2,3
2016-02-06,14:10:00,ujjawal,36072-2,MT,203,0,5
2016-02-06,14:20:00,ujjawal,36072-2,MT,230,0,7
2016-02-06,14:30:00,ujjawal,36072-2,MT,226,0,1
2016-02-06,14:40:00,ujjawal,36072-2,MT,195,0,6
2016-02-06,14:50:00,ujjawal,36072-2,MT,314,0,1
2016-02-06,15:00:00,ujjawal,36072-2,MT,357,0,2
2016-02-06,15:10:00,ujjawal,36072-2,MT,387,0,9
2016-02-06,15:20:00,ujjawal,36072-2,MT,1084,1,3
2016-02-06,15:30:00,ujjawal,36072-2,MT,1295,2,3
2016-02-06,15:40:00,ujjawal,36072-2,MT,223,0,8
2016-02-06,15:50:00,ujjawal,36072-2,MT,254,0,1
2016-02-06,16:00:00,ujjawal,36072-2,MT,252,0,7
2016-02-06,16:10:00,ujjawal,36072-2,MT,268,0,1
2016-02-06,16:20:00,ujjawal,36072-2,MT,242,0,1
2016-02-06,16:30:00,ujjawal,36072-2,MT,254,0,9
2016-02-06,16:40:00,ujjawal,36072-2,MT,271,0,3
2016-02-06,16:50:00,ujjawal,36072-2,MT,244,0,7
2016-02-06,17:00:00,ujjawal,36072-2,MT,281,0,1
2016-02-06,17:10:00,ujjawal,36072-2,MT,190,0,8
2016-02-06,17:20:00,ujjawal,36072-2,MT,187,0,1
2016-02-06,17:30:00,ujjawal,36072-2,MT,173,0,9
2016-02-06,17:40:00,ujjawal,36072-2,MT,140,0,5
2016-02-06,17:50:00,ujjawal,36072-2,MT,147,0,6
2016-02-06,18:00:00,ujjawal,36072-2,MT,109,0,4
2016-02-06,18:10:00,ujjawal,36072-2,MT,99,0,1
2016-02-06,18:20:00,ujjawal,36072-2,MT,66,0,6
2016-02-06,18:30:00,ujjawal,36072-2,MT,67,0,4
2016-02-06,18:40:00,ujjawal,36072-2,MT,40,0,2
2016-02-06,18:50:00,ujjawal,36072-2,MT,52,0,3
2016-02-06,19:00:00,ujjawal,36072-2,MT,40,0,3
2016-02-06,19:10:00,ujjawal,36072-2,MT,30,0,2
2016-02-06,19:20:00,ujjawal,36072-2,MT,25,0,3
2016-02-06,19:30:00,ujjawal,36072-2,MT,35,0,4
2016-02-06,19:40:00,ujjawal,36072-2,MT,14,0,1
2016-02-06,19:50:00,ujjawal,36072-2,MT,97,0,7
2016-02-06,20:00:00,ujjawal,36072-2,MT,14,0,1
2016-02-06,20:10:00,ujjawal,36072-2,MT,12,0,4
2016-02-06,20:20:00,ujjawal,36072-2,MT,11,0,2
2016-02-06,20:30:00,ujjawal,36072-2,MT,12,0,1
2016-02-06,20:40:00,ujjawal,36072-2,MT,6,0,1
2016-02-06,20:50:00,ujjawal,36072-2,MT,13,0,2
2016-02-06,21:00:00,ujjawal,36072-2,MT,5,0,1
2016-02-06,21:10:00,ujjawal,36072-2,MT,12,0,2
2016-02-06,21:20:00,ujjawal,36072-2,MT,1,0,1
2016-02-06,21:30:00,ujjawal,36072-2,MT,21,0,2
2016-02-06,21:40:00,null,null,null,null,null,null
2016-02-06,21:50:00,ujjawal,36072-2,MT,9,0,3
2016-02-06,22:00:00,ujjawal,36072-2,MT,2,0,1
2016-02-06,22:10:00,ujjawal,36072-2,MT,12,0,5
2016-02-06,22:20:00,ujjawal,36072-2,MT,1,0,1
2016-02-06,22:30:00,ujjawal,36072-2,MT,9,0,1
2016-02-06,22:40:00,ujjawal,36072-2,MT,13,0,1
2016-02-06,22:50:00,null,null,null,null,null,null
2016-02-06,23:00:00,ujjawal,36072-2,MT,20,0,2
2016-02-06,23:10:00,ujjawal,36072-2,MT,10,0,3
2016-02-06,23:20:00,ujjawal,36072-2,MT,10,0,1
2016-02-06,23:30:00,ujjawal,36072-2,MT,6,0,1
2016-02-06,23:40:00,ujjawal,36072-2,MT,12,0,1
2016-02-06,23:50:00,null,null,null,null,null,null

答案 4 :(得分:0)

这是另一个Perl解决方案

它将$date初始化为文件第一行中包含的日期,时间为00:00:00

然后使用%values的值作为关键字将$date哈希填充记录,将值递增10分钟,直到月份更改为止。这些形成“默认”值

然后该文件的内容用于覆盖我们具有实际值的%values的所有元素。任何差距将保持默认设置为上一步

然后简单地按排序顺序打印哈希,从而生成一组完整的数据,并根据需要插入默认值

use strict;
use warnings 'all';

use Time::Piece;
use Time::Seconds 'ONE_MINUTE';
use Fcntl ':seek';

my $delta = 10 * ONE_MINUTE;

my $date = Time::Piece->strptime(<ARGV> =~ /^([\d-]+)/, '%Y-%m-%d');

my %values;

for ( my $day = $date->mday; $date->mday == $day; $date += $delta ) {
    my $ds = $date->strftime('%Y-%m-%d,%H:%M:%S');
    $values{$ds} = $ds. ',null' x 6 . "\n";
}

seek ARGV, 0, SEEK_SET;
while ( <ARGV> ) {
    my ($ds) = /^([\d-]+,[\d:]+)/;
    $values{$ds} = $_;
}

print $values{$_} for sort keys %values;