Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

275
Visualizações
bash una forma más eficiente de convertir el formato de fecha impar para que sea reconocido por la fecha de Linux

Aquí está el formato de fecha en un montón de archivos que tengo

 $cat ./file.log 20220405T130001 message1 20220405T130002 message2 20220405T130003 message3 20220405T130004 message4 20220405T130005 message5

Puedo convertirlo a un formato de fecha utilizable haciendo esto:

 $cat ./file.log | sed 's/^\(.\{4\}\)/\1-/' | sed 's/^\(.\{7\}\)/\1-/' | sed 's/\(.\{10\}\)./\1 /' | sed 's/^\(.\{13\}\)/\1:/' | sed 's/^\(.\{16\}\)/\1:/ 2022-04-05 13:00:01 message1 2022-04-05 13:00:02 message2 2022-04-05 13:00:03 message3 2022-04-05 13:00:04 message4 2022-04-05 13:00:05 message5

Esto parece muy ineficiente. ¿Hay una manera más fácil/mejor de lograr esto en bash?

Las reglas a cambiar serían las siguientes

  • insertar - después de los primeros 4 caracteres
  • insertar - después de los siguientes 2 caracteres después de la regla anterior
  • insertar - después de los siguientes 2 caracteres después de la regla anterior
  • reemplazar T con después de los siguientes 2 caracteres después de la regla anterior
  • insertar : después de los siguientes 2 caracteres después de la regla anterior
  • insertar : después de los siguientes 2 caracteres después de la regla anterior
over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Suponiendo que siempre obtenga el mismo formato en el archivo de entrada, un solo sed puede manejar esto con múltiples grupos de captura:

 sed -E 's/^(.{4})(..)(..)T(..)(..)/\1-\2-\3 \4:\5:/' file 2022-04-05 13:00:01 message1 2022-04-05 13:00:02 message2 2022-04-05 13:00:03 message3 2022-04-05 13:00:04 message4 2022-04-05 13:00:05 message5
over 4 years ago · Santiago Trujillo Relatório

0

Con sus muestras mostradas, intente seguir el código awk . La explicación simple sería establecer el separador de campo como espacios T OR. En el programa principal, imprima cadenas secundarias (usando la función substr de awk ) donde imprima las respectivas cadenas secundarias usando los campos 1, 2 y 3 según la salida requerida.

 awk -F'T| ' ' { print substr($1,1,4)"-"substr($1,5,2)"-"substr($1,7,2),substr($2,1,2)":"substr($2,3,2)":"substr($2,5,2),$3 } ' Input_file
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda