次の形式の生データ行 50 個があります。
09-06-16 16:45:00 1100000000
09-06-16 17:00:00 1200000000
09-06-16 17:15:00
1300000000
09-06-00 0 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)
}'