¿Cómo convertir “aaaa-mm-dd” a “dd.mm” en la columna del archivo de texto usando awk (o sed, etc.)?

0

Consideremos que tenemos la siguiente línea en el archivo de texto:

...
2018-09-13    5555    33-33    Some_string
...

Necesito cambiar la primera columna (fecha como yyyy-mm-dd ) a otro formato ( dd.mm, cayendo el año) sin tocar otras columnas:

...
13.09    5555    33-33    Some_string
...

¿Cómo puedo hacer esto mediante programación awk (o sed, etc.)?

N0rbert
fuente

Respuestas:

2

Solución posible

sed 's/^....-\(..\)-\(..\)/\2.\1/'

Estos puntos múltiples pueden no ser elegantes; al comando no le importa si se trata de números; no importa si hay algo más en la primera "columna". Estos problemas pueden solucionarse con un enfoque más complejo, pero en su forma actual, el comando es bastante sencillo.

El comando general sed 's/A/B/' reemplaza patrón A con B, como máximo una vez por línea.

Dónde A en este caso consiste en:

  • ^ - el comienzo de un marcador de línea,
  • .... - exactamente cuatro caracteres,
  • - Literal -,
  • (..) - exactamente dos personajes referenciados más tarde con \1,
  • - Literal -,
  • (..) - exactamente dos personajes referenciados más tarde con \2.

Y B es

  • \2 - lo que haya en el segundo () en A,
  • . Literal .,
  • \1 - Lo que haya sido en el primero. () en A.

Adicionalmente ( y ) son escapados por \.

Para procesar un archivo agréguelo como último argumento. Para procesar un archivo en uso use -i, p.ej.

sed -i 's/^....-\(..\)-\(..\)/\2.\1/' myfile.txt
Kamil Maciorowski
fuente