使用 Awk 或替代方案在序列中插入逻辑新行

使用 Awk 或替代方案在序列中插入逻辑新行

我有 50 行形式的原始数据,如下所示:

09-06-16 16:45:00 1100000000
09-06-16 17:00:00 1200000000
09-06-16 17:15:00 1300000000
09-06-16 17:30:00 1400000000
09-06- 16 17 :45:00 1500000000

我想使用命令或创建一个脚本,在该序列的末尾添加一个新行。单行数据应该将时间提前 15 分钟间隔,我还希望数字增加 100000000。但是我打算编写一个 crontab 脚本来模拟数据创建。因此,日期应酌情更改。当该值为 1500000000 时,我希望它返回到 1100000000。

我已经编写了删除第一行数据的脚本(更多的是我的水平),以确保始终有 50 个数据点。

任何帮助是极大的赞赏

答案1

我会用perl这里来完成整个事情:

perl -MTime::Piece -i -lne '
  print unless $. == 1; # remove first line
  if (eof) {
    ($t, $n) = /(.*) (.*)/;
    $t = Time::Piece->strptime($t, "%y-%m-%d %T") + 60*15;
    $n += 1e8; $n = 11e8 if $n > 15e8;
     print $t->strftime("%y-%m-%d %T $n")
  }' your-file

Time::Piece5.10 中添加。对于旧版本,您始终可以使用POSIX::mktime

perl -MPOSIX -i -lne '
  print unless $. == 1; # remove first line
  if (eof) {
    ($y, $mo, $d, $h, $mi, $s , $n) = /(..)-(..)-(..) (..):(..):(..) (.*)/;
    $t = mktime($s, $mi, $h, $d, $mo-1, $y+100) + 60*15;
    $n += 1e8; $n = 11e8 if $n > 15e8;
    print strftime("%y-%m-%d %T $n", localtime $t)
  }'

相关内容