Preencher os valores de dia / hora para garantir um comprimento de 3 dígitos

2

Eu tenho um script que renderiza os timestamps no formato YYYY'DDD'TTT, onde Y = ano, D = dia fora de 365 e T = tempo em 1000 do dia:

#!/bin/bash
clear
s=$(($(date +"%H*3600+%M*60+%S")))
t=$(($s * 5 / 432))
d=$(date +%j)
y=$(date +%Y)
printf "$y\'$d\'$t" "$y" "$d" "$t"

mas preciso modificá-lo para que D e T sempre produzam um valor de três caracteres (ou seja, '001' em vez de '1' para 1º de janeiro, '001' em vez de '1' para o primeiro minuto de o dia) - e eu não tenho ideia de como.

Qualquer ajuda é muito apreciada

    
por Jack Anders 29.09.2011 / 16:52

2 respostas

4

Talvez você possa dar uma olhada na string printf format. O primeiro parâmetro de printf deve ser uma string de formato que inclua espaços reservados para cada um dos argumentos a seguir.

Você pode incluir %d para representar um argumento no formato decimal com sinal e pode prefixar d por 0n para n caracteres de preenchimento zero.

printf "%d/%d/%d" 2011 2 3

A saída 2011/2/3

printf "%04d/%03d/%05d" 2011 2 45

A saída deve ser 2011/002/00045

Espero que isso ajude

    
por 29.09.2011 / 17:14
2

Deixe date fazer o trabalho!

date +%3j

Então, para a parte de milésimos, um truque simples é computar 1000 mais o número de millidays e remover o 1 inicial. Então, para o seu script:

s=$(($(date +"%H*3600+%M*60+%S")))
t=$(($s * 5 / 432 + 1000))
date "+%Y'%3j'${t#1}"
    
por 30.09.2011 / 00:40

Tags