Eu tenho a data escrita no arquivo csv como 19/10 / 2014.Eu quero no formato 19-Oct-2014

1

Eu tenho a data em um arquivo CSV como 19/10/2014 . Eu quero isso no formato 19-Oct-2014 .

    
por jpyngas 16.02.2018 / 11:32

5 respostas

3

O comando date pode formatar isso para você:

date -d "2014-10-19" +%d-%b-%Y

que produz

19-Oct-2014

Se você der exemplos de linhas de seu arquivo, podemos fazer o script para você.

Uma maneira é usar awk :

echo zzz,19/10/2014,aaa,bbb | awk -F, '{split($2,dateelem,"/"); cmd = "date -d " dateelem[3] "-" dateelem[2] "-" dateelem[1] " +%d-%b-%Y"; cmd | getline date; OFS=","; $2=date; print; close(cmd)}'

que dá

zzz,19-Oct-2014,aaa,bbb

Supondo aqui que você deseja modificar o 2º campo. Ajuste "split($2,dateelem,"/");" no script awk para alterar o número do campo (coluna) que sua data aparece em

    
por 16.02.2018 / 11:44
2

Uma solução completamente no GNU awk é a seguinte:

awk '{ split($0,slt,"/");datspec=mktime(slt[3]" "slt[2]" "slt[1]" 00 00 00");print strftime("%d-%b-%Y",datspec) }' <<< "19/10/2014"

Tomando a data como entrada, primeiro dividimos os dados em uma matriz (slt) para obter a data, mês e ano. Em seguida, usamos a função mktime do awk para obter uma especificação de data que é usada pela função sttftime do awk para obter a data no formato correto.

Com um csv, $ 0 seria o número correspondente ao campo delimitado por vírgulas que possui a data.

    
por 16.02.2018 / 12:03
0

perl pode fazê-lo, mas não é realmente para iniciantes. No entanto, as datas de análise são melhor tratadas por bibliotecas de manipulação de data apropriadas. perl tem um na caixa, Time :: Piece

$ cat file
a,b,19/10/2014,d

$ perl -MTime::Piece -F, -lane '
    $F[2] = Time::Piece->strptime($F[2], "%d/%m/%Y")->strftime("%d-%b-%Y");
    print join ",", @F
' file
a,b,19-Oct-2014,d
    
por 16.02.2018 / 15:31
0

Eu fiz pelo método abaixo

comando

 j='date -d "2014/10/19" +%b';echo "19/10/2014" | awk -v j="$j" -F "/"  '{print $1"-"j"-"$3}'

Saída

19-Oct-2014
    
por 16.02.2018 / 16:23
0

Outra abordagem awk . Usa a funcionalidade básica awk , então é provável que funcione com implementações não-GNU.

$ cat infile
foo,19/10/2014,bar
foo2,19/01/2015,bar2
$ awk -F, '{print $1","substr($2,0,2)"-"substr("JanFebMarAprMayJunJulAugSepOctNovDec",substr($2,4,2)*3-2,3)"-"substr($2,7,4)","$3}' infile
foo,19-Oct-2014,bar
foo2,19-Jan-2015,bar2
$
    
por 16.02.2018 / 23:07