Usando o Awk ou uma alternativa para inserir uma nova linha lógica em uma sequência

0

Eu tenho dados brutos que assumem a forma de 50 linhas, conforme abaixo:

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

Gostaria de usar um comando ou criar um script que adicione uma nova linha ao final dessa sequência. A linha única de dados deve avançar o tempo em um intervalo de 15 minutos e também gostaria que o número aumentasse em 100000000. No entanto, pretendo escrever um script crontab que imite a criação de dados. Portanto, quando apropriado, a data deve mudar. E quando o valor é 1500000000 eu gostaria que voltasse para 1100000000.

Eu já escrevi o script que remove a primeira linha de dados (mais no meu nível) para garantir que haja sempre 50 pontos de dados.

Qualquer ajuda é muito apreciada

    
por Sneakers 02.12.2016 / 13:25

1 resposta

0

Eu usaria perl aqui para fazer tudo:

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 foi adicionado em 5.10. Para versões mais antigas, você sempre pode usar 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)
  }'
    
por 02.12.2016 / 14:12

Tags