Entrada:
1,2,20,11
1,1,2018,111
Resultado:
1,02,20,11
1,01,18,111
eu gostaria de inserir 0
no campo número 2, que é o mês, caso seja um número único.
E deseja remover os primeiros 2 dígitos do campo número 3, que é o ano, caso sejam 4 números.
Usando
awk
:Isso reformata incondicionalmente o segundo campo delimitado por vírgulas em um inteiro de dois dígitos preenchido com zero. Se o terceiro campo tiver quatro caracteres, seus dois primeiros dígitos serão removidos. O registro resultante é então impresso.
usando
awk
:length($3)
retorna o comprimento da coluna3;-1
é usado para permitir que osubstr($3, START[, LEN])
comprimento de retorno dos caracteres LEN comece da posição do penúltimo dígito como START (que élength($3)-1
agora). se o LEN opcional for omitido, o restante de START será usado.EDiT para a pergunta revisada ( agora 4 colunas ):
para o caso geral em que N número de colunas ( pelo menos 3 ):
comando
resultado
Uma maneira de lidar com esse cenário é como mostrado:
comando
Resultado
Explicação:
O sinalizador /e no comando s/// tratará o RHS como um código Perl e o avaliará com quaisquer parâmetros fornecidos e colocará o resultado dessa avaliação como o RHS do comando s///.