Foros del Web » Administración de Sistemas » Unix / Linux »

Substitición de campos con awk y gsub

Estas en el tema de Substitición de campos con awk y gsub en el foro de Unix / Linux en Foros del Web. Hola, Lo primero de todo presentarme a la comunidad y pediros un favor a ver si alguien me puede echar una mano ya que ando ...
  #1 (permalink)  
Antiguo 28/02/2012, 08:18
 
Fecha de Ingreso: febrero-2012
Mensajes: 1
Antigüedad: 12 años, 8 meses
Puntos: 0
Substitición de campos con awk y gsub

Hola,

Lo primero de todo presentarme a la comunidad y pediros un favor a ver si alguien me puede echar una mano ya que ando algo perdidilla con el comando awk.

Tengo un fichero con esta estructura de datos:

203;55555
324;56565
656;45687
878;97889


Y otro fichero con esta estructura:

788;55555;465465;......más valores;
665;56565;878788;......más valores;
122;45687;513132;......más valores;
245;97889;554888;......más valores;

Mi fin es conseguir un fichero así:

203;55555;465465;......más valores;
324;56565;878788;......más valores;
656;45687;513132;......más valores;
878;97889;554888;......más valores;

Es decir, a partir de el valor del segundo campo del primer fichero actualizar el primer campo del segundo fichero que corresponda a este valor y mantener el resto del fichero igual. Los ficheros son muy grandes así que he probado con awk y gsub para intentar solucionarlo pero no lo consigo...

Si alguien me puede echar una mano le estaré muy agredecida.

¡¡Muchas gracias!!
  #2 (permalink)  
Antiguo 28/02/2012, 09:39
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Substitición de campos con awk y gsub

Pues para eso existe el comando join
Código sh:
Ver original
  1. join -t ";" -j 2 archivo1 archivo2
Une archivo1 con archivo2, usando ; como separador de campos, y uniendo por el segundo campo de cada archivo.

Claro que para que funcione correctamente los campos deben estar ordenados por la clave en ambos archivos, hay que usar sort:
Código sh:
Ver original
  1. sort -t ";" -k 2,2 archivo1
  2. sort -t ";" -k 2,2 archivo2

Es decir, ordenar por el segundo campo, usando ";" como separador.

La salida de join dada la entrada que pusiste es

Código:
45687;656;122;513132;......más valores;
55555;203;788;465465;......más valores;
56565;324;665;878788;......más valores;
97889;878;245;554888;......más valores;

Saludos.

Etiquetas: awk, campos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:30.