obter dia a partir da data com o acréscimo de 0 a 1 a 9 dígitos

0

Estou usando o comando awk para obter a data de criação do arquivo e, a partir desse dia, mês e ano, mas para um dígito de 1-9 estou obtendo a saída como 2016041 mas quero saída 20160401 .

D=$(ls -ltr $line | awk '{print $7}') 

M=$(ls -ltr $line | awk '{print $6}')

 Y=$(date +"%Y")

TEMP2="$Y$M$D"
    
por Chirag Dhaduk 10.04.2016 / 21:39

2 respostas

4

Fazendo isso corretamente de ls é complicado porque o formato de data muda com a idade dos arquivos. Além disso, o cálculo para $M é suspeito, pois ls normalmente retorna um nome para o mês em vez de um número. Presumivelmente, OP está usando o comando date para tentar contornar as diferenças no formato ls date, mas isso significa que todos os arquivos receberão o mesmo valor por um ano.

No entanto, a questão do OP está focada em zeros iniciais. Essa parte é fácil em awk :

D=$(ls -ltr $line | awk '{printf "%02d", $7}')
M=$(ls -ltr $line | awk '{printf "%02d", $6}')
Y=$(date +"%Y")

Se eu tivesse que fazer isso no HPUX, procuraria usar o Perl (que é pré-instalado), pois isso pode evitar problemas com ls e formato de data.

Aqui está um exemplo rápido ( man perlfunc é onde começar):

#!/usr/bin/perl -w

use strict;

for my $n ( 0 .. $#ARGV ) {
    my (
        $dev,  $ino,   $mode,  $nlink, $uid,     $gid, $rdev,
        $size, $atime, $mtime, $ctime, $blksize, $blocks
    ) = stat( $ARGV[$n] );
    my ( $sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst ) =
      localtime($mtime);

    # printf "%s:", $ARGV[$n];
    printf "%04d%02d%02d", 1900 + $year, 1 + $mon, $mday;

    # printf "\n";
}
1;

Eu verifiquei o script com as duas instruções printf descomentadas e observando os arquivos de amostra. Você chamaria esse script com apenas um nome de arquivo (para vários nomes de arquivos, a falta de formatação seria um incômodo).

    
por 10.04.2016 / 22:01
0

Zeros à esquerda também podem ser adicionados usando printf . Parece estar disponível no HP-UX.

D=$(ls -ltr $line | awk '{print $7}') 
M=$(ls -ltr $line | awk '{print $6}')
Y=$(date +"%Y")
TEMP2="'printf '%02d%02d%04d' $D $M $Y'"
    
por 11.04.2016 / 02:52