Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

274
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!