我有 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::Piece
5.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)
}'