qual é a maneira mais simples de incrementar os números nesta string 01:02:99 no unix?

1

Qual é a maneira mais simples de incrementar os números nesta string 01:02:99 ?

Saída esperada: 01:03:00

Estou esperando por uma resposta de sed , mas não acho que seria simples.

    
por djent 12.07.2016 / 08:28

2 respostas

3

Você pode usar awk .

$ echo 01:02:99 | awk -vINC_BY=1 -F: '{
    $3 += INC_BY; 
    $2 += int( $3 / 100 );
    $1 += int( $2 / 100 );
    printf("%02d:%02d:%02d\n", $1, $2 % 100, $3 % 100);
}'
01:03:00

Isso pressupõe que você deseja incrementar por um. Altere "INC_BY" para o valor que você deseja aumentar o número por.

Usar sed é não é uma boa ideia .

    
por 12.07.2016 / 09:23
2

Isso pode ser feito no bash ...

Primeiro, retire o : para tratá-lo como um número inteiro e, em seguida, adicione 1. Por causa do zero inicial, precisamos forçar a base 10. A sintaxe seria semelhante a

let x=10#$(echo $x | tr -d :)+1

Em seguida, podemos usar printf e alguns bash aritmética para colocar o : de volta.

printf %02d:%02d:%02d $((x/10000%100)) $((x/100%100)) $((x%100))

Podemos juntar isso: por exemplo,

$ x=01:02:99
$ let x=10#$(echo $x | tr -d :)+1
$ x=$(printf %02d:%02d:%02d $((x/10000%100)) $((x/100%100)) $((x%100)))
$ echo $x
01:03:00
    
por 12.07.2016 / 12:59