Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

273
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda