αԋɱҽԃ αмєяιcαη Asked: 2018-07-04 12:56:04 +0800 CST2018-07-04 12:56:04 +0800 CST 2018-07-04 12:56:04 +0800 CST Editar campos separados por vírgulas 772 Entrada: 1,012018,111 2,1-2018,111 3,10-2018,111 Resultado: 1,01/2018,111 2,01/2018,111 3,10/2018,111 Como posso conseguir que o significado da edição do mês e do ano seja mm/aaaa awk sed 3 respostas Voted Best Answer steeldriver 2018-07-04T13:20:29+08:002018-07-04T13:20:29+08:00 Com GNU Awk, usando patsplitpara dividir o segundo campo delimitado por vírgula em subcampos de no máximo dois dígitos decimais: $ gawk 'BEGIN{OFS=FS=","} {patsplit($2,a,/[0-9][0-9]?/); $2 = sprintf("%02d/%d%d", a[1], a[2], a[3])} 1' file 1,01/2018,111 2,01/2018,111 3,10/2018,111 Se Perl é uma opção perl -F, -lpe ' $F[1] =~ s{(\d\d?)-?(\d+)}{sprintf "%02d/%d", $1, $2}e; $_ = join ",", @F ' file Nisha 2018-07-06T21:34:27+08:002018-07-06T21:34:27+08:00 sed -e 's/^(. ),(. ),(. )/\2/g' -e 's/([0-9]{1,2})([0-9]{4} )/\1-\2/g' arquivo* s/^(. ),(. ),(.*)/\2/g - divide com base em vírgulas e obtém o segundo valor s/([0-9]{1,2})([0-9]{ 4})/\1-\2/g - divide e insere '-' entre ano e mês Nisha 2018-07-07T00:18:55+08:002018-07-07T00:18:55+08:00 sed -e 's/^(. ),([0-9]{1,2})([0-9]{4}),(. )/\1,\2-\3,\4/ g' teste.txt ^(.*), = captura até o primeiro ',' e armazenado em \1 ([0-9]{1,2}) = captura um número de 1 ou 2 dígitos e armazena em \2 ([0-9]{4}) = capture 4 didit no e armazene em \3 ,(.*) \4 = capturar o resto de ',' e armazená-lo em \4 E substitua de acordo
Com GNU Awk, usando
patsplit
para dividir o segundo campo delimitado por vírgula em subcampos de no máximo dois dígitos decimais:Se Perl é uma opção
sed -e 's/^(. ),(. ),(. )/\2/g' -e 's/([0-9]{1,2})([0-9]{4} )/\1-\2/g' arquivo*
s/^(. ),(. ),(.*)/\2/g - divide com base em vírgulas e obtém o segundo valor s/([0-9]{1,2})([0-9]{ 4})/\1-\2/g - divide e insere '-' entre ano e mês
sed -e 's/^(. ),([0-9]{1,2})([0-9]{4}),(. )/\1,\2-\3,\4/ g' teste.txt