Você deve ter um awk
(ou nawk
) utilizável:
BEGIN {
nmon=split("Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec",month)
for(mm=1;mm<=nmon;mm++) {
month[month[mm]]=mm
month[sprintf("%02i",mm)]=month[mm]
}
}
/[12][0-9][0-9][0-9]-[0-1][0-9]-[0-3][0-9]/ {
split($1,bits,/-/)
printf("%s %02i\n",month[bits[2]],bits[3])
}
O bloco BEGIN{}
cria um hash de mapeamento. É um propósito um pouco mais geral do que você precisa estritamente (por acaso tenho isso por aí), seus índices são o nome curto, o ordinal do mês (número) e o ordinal do mês de dois dígitos com um zero à esquerda. Isso significa que você pode converter o nome em número ou vice-versa. Você pode facilmente adaptá-lo para nomes longos de mês também (e possivelmente localização, mas não vamos nos deixar levar).
O próximo bloco procura por linhas que contenham uma string de data provável, divide em "-" e converte a data. (Isso também funciona em gawk
, mas se você tiver isso, então strftime()
e mktime()
são uma solução mais elegante.)
Uma versão básica do shell ksh
, já que o AIX possui ksh
:
set -A month pad Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
while IFS=- read yyyy mm dd junk; do
echo ${month[$mm]}
done
Isto usa um array (POSIX sh
não tem arrays, bash
faz, então você pode fazer algo similar com isso também). Observe que isso depende de ksh
para manipular o 0 inicial em um número de mês, apenas o trata como um inteiro. Como os arrays ksh
(e bash
) são baseados em zero, colocamos um valor "pad" no índice 0 em vez de reproduzir com + 1 / -1 nos índices.