encontra o último número digitado depois de encontrar o arquivo

0

Minha pergunta é meio longa Im tentando fazer um check in e out sistema simples, um menu com opções 1 checkin e 2 check-out no final do dia quando eu ir para casa. Meu arquivo contém:

Dato: 22-02-2018    
Mødt ind: 700    
Gået hjem: 1600    
Overtid:    
Dato: 23-02-2018    
Mødt ind: 730    
Gået hjem: 1600
Overtid:

Eu tenho que encontrar diferença para 730 e 1600 neste arquivo .. e se o número for maior que 800 ele tem que imprimir o número se houver uma diferença espero que você entenda minha pergunta

    
por peter 23.02.2018 / 10:59

1 resposta

2

Se for o Overtid: que você deseja preencher, faça o seguinte:

awk 'function overtime(s,e) {
         if (s) printf("Overtid: %d\n", (e - s > 800) ? e - s : 0);
     }
     /^Mødt ind:/  { start = $NF; print } 
     /^Gået hjem:/ { end   = $NF; print } 
     /^Dato:/      { overtime(start, end); print }
     END           { overtime(start, end) }' file

Isso seleciona os horários de início e término dos dados e, para cada linha Dato: (que significa um novo registro nos dados), imprime o tempo extra para o registro anterior. Isso também é feito no final (o bloco END ).

Eu fiz overtime() como uma função, já que precisamos fazer a mesma coisa em dois lugares diferentes no script. O if (s) na função é garantir que não recebemos uma saída Overtid: 0 falsa ao atingir a primeira linha Dato: nos dados.

As instruções print no código passam pelos dados existentes para a saída.

Saída com seus dados:

Dato: 22-02-2018
Mødt ind: 700
Gået hjem: 1600
Overtid: 900
Dato: 23-02-2018
Mødt ind: 730
Gået hjem: 1600
Overtid: 870
    
por 23.02.2018 / 11:06

Tags