Linux/Unix Shell Scripting - Dar formato a datos de una columna

   
Vista:

Dar formato a datos de una columna

Publicado por Jdomgo3 (15 intervenciones) el 05/01/2012 10:30:45
Tengo un fichero.txt que contiene:

1
2
3
aaaaa1;bbbbb2;ccccc3;01 20 08:59:05 2011;01 20 08:59:05 2012
aaaaa1;bbbbb2;ccccc3;07 30 22:43:54 2003;10 13 22:43:54 2021
aaaaa1;bbbbb2;ccccc3;07 30 22:39:20 2003;10 13 22:39:20 2021


Son filas que contienen columnas separadas por ";". El contenido de la primera, segunda y tercera columna es alfanumérico.
Pero el contenido de las columnas 4 y 5 son fechas con formato "mes día hh:mm:ss año".
Lo que necesito hacer es, de algún modo con awk o con sed o con lo que sea, sustituír el contenido de las columnas 4 y 5, de modo que quede así:

1
2
3
aaaaa1;bbbbb2;ccccc3;20/01/2011;20/01/2012
aaaaa1;bbbbb2;ccccc3;30/07/2003;13/10/2021
aaaaa1;bbbbb2;ccccc3;30/07/2003;13/10/2021


Ojo, necesito variar el orden del formato de fecha para tenga el formato "día/mes/año" y eliminar la hora, que no lo necesito.
Se me ocurre lo sigueinte:

1
cat fichero.txt | awk -F";" '{print $5}' | nawk -F" " '{print $2"/"$1"/"$4}'


Pero esto solo me modifica el contenido de la columna 5 y no me muestra el contenido de las demás columnas. ¿Como podíria hacerlo?

Un saludo y gracias de antemano.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Dar formato a datos de una columna

Publicado por caic (82 intervenciones) el 05/01/2012 15:04:16
Hola!

Prueba con un for:

for i in $(cat fichero.txt)
do
echo -n `echo $i | awk -F";" '{print $1";"$2";"$3}` # Primeros tres campos
echo -n `echo $i | awk ... # cuarto campo
echo `echo $i | awk -F";" '{print $5}' | nawk -F" " '{print $2"/"$1"/"$4}' # quinto campo
done

Ahora q lo miro dos veces me parece un poco chapuzas pero es lo q se me ha ocurrido :)

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Dar formato a datos de una columna

Publicado por Jdomgo3 (15 intervenciones) el 09/01/2012 11:40:21
Muchas gracias por tu respuesta caic, al final lo resolví con este método:

1
sed "1,$ s/ [0-9][0-9]:[0-9][0-9]:[0-9][0-9] /\//g" fichero.txt >> salida.txt


y a continuación:

1
2
3
4
5
6
7
8
9
10
A=`cat salida.txt | awk -F";" '{print $1}'`
B=`cat salida.txt | awk -F";" '{print $2}'`
C=`cat salida.txt | awk -F";" '{print $3}'`
D=`cat salida.txt | awk -F";" '{print $4}'`
E=`cat salida.txt | awk -F";" '{print $5}'`
F=`cat salida.txt | awk -F";" '{print $6}'`
G=`cat salida.txt | awk -F";" '{print $7}' | awk -F" " '{print $2"/"$1"/"$3}'`
H=`cat salida.txt | awk -F";" '{print $8}' | awk -F" " '{print $2"/"$1"/"$3}'`
 
echo "$A;$B;$C;$D;$E;$F;$G;$H" > resultado_final.txt
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar