Converter String para formato de hora e anexar com data atual - Shell / ksh

0

Eu estou olhando para ter uma string como parâmetro de comando como HHMMSS e convertê-lo para o formato de tempo como HH:MM:SS e anexá-lo à data atual (data precisa ser gerada dentro do script usando o comando 'date')

Por exemplo, se meu argumento de linha de comando for 093500 , isso deve ser convertido em 09:35:00 e ser anexado à data atual como, 2018-05-16 09:35:00

Exemplo:

$ ./convertTime.sh 093500
2018-05-16 09:35:00
    
por Sierra 16.05.2018 / 22:35

2 respostas

0

Aqui está uma solução possível. Funciona assim:

$ ./format_date.sh 092533
2018-05-17 09:25:33
#!/bin/bash

format_time(){
    point=0
    while [ "$point" -le "${#1}" ];
    do
        string=$string"${1:$point:2}"
        if [ "$point" -lt "$((${#1}-2))"  ]
        then
        string=$string":"
        fi
        point=$((point+2))
    done
    echo "$string"
}

echo "$(date +'%Y-%m-%d')" "$( format_time "$1" )"

Isso aproveita a substituição de parâmetro, típica de bash e ksh , portanto, isso se ajusta às suas tags de pergunta, mas não é adequado para POSIX /bin/sh , pois o ${variable:position:offset} não funciona no POSIX /bin/sh .

    
por 16.05.2018 / 22:55
3

Se por ksh , você quer dizer ksh93:

$ t=093500
$ DATEMSK=/dev/stdin <<<%H%M%S printf "%(%F %T)T\n" "$t"
2018-05-17 09:35:00

Ou:

$ printf '%(%F)T %.8s\n' now "${t//??/
$ date +"%Y-%m-%d $t" | sed 's/\(..\)\(..\)$/::/'
2018-05-17 09:35:00
:}" 2018-05-17 09:35:00

Ou portável (conchas de famílias Bourne ou csh ou fish )

$ t=093500
$ DATEMSK=/dev/stdin <<<%H%M%S printf "%(%F %T)T\n" "$t"
2018-05-17 09:35:00

(para shells semelhantes a rc, use date +'%Y-%m-%d '$t )

    
por 16.05.2018 / 23:07