The UNIX and Linux Forums  
Hola y bienvenida de los Estados Unidos a la UNIX y Linux Foros! Gracias por su visita y formar parte de nuestra comunidad global.

Go Back   El UNIX y Linux Foros > Arriba Foros > Programación de scripts de shell y
.
google unix.com



Programación de scripts de shell y Plantear preguntas sobre KSH, CSH, SH, BASH, PERL, PHP, SED, AWK y otros scripts de shell y lenguajes de script de shell aquí.

Más UNIX y Linux Foro Temas usted puede encontrar útiles
Hilo Hilo para principiantes Foro Respuestas Último mensaje
Sed de ayuda en la actualización de algo sólo en un caso concreto. bisla.yogender Programación de scripts de shell y 4 03-24-2008 11:48 AM
A saber si el archivo es la actualización o no raj333 Programación de scripts de shell y 2 11-05-2007 05:29 PM
Actualización de archivos en bucle braindrain Programación de scripts de shell y 4 06-20-2007 02:37 PM
¿Por qué mi sar no se actualiza el archivo de salida. skneeli UNIX para usuarios avanzados y expertos 1 11-12-2006 08:29 PM
La actualización de un archivo en un archivo Zip dbridle AIX 6 09-27-2006 04:29 PM

Closed Thread
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered by Powered by Google
 
Linkback vínculo Herramientas de hilo Buscar en este Hilo Tasa de Hilo Modos de visualización
  #1 (Enlace permanente)  
Old 06-09-2008
Mecano mecano is offline
Usuario Registrado
  
 

Fecha: junio 2008
Publicaciones: 4
awk actualización de un archivo con otro, la comparación, la actualización

Hola,
He leído y de búsqueda a través de este maravilloso foro y trataron diferentes enfoques, pero parece que falta un poco de conocimiento y de las neuronas ^ ^

Aquí está lo que estoy tratando de lograr:

archivo1:
prueba Filea 3495;
prueba fileb 4578;
prueba filec 7689;
prueba Filey 9978;
prueba filez 12300;

archivo2:
prueba Filea 3495;
4578 prueba presentada;
prueba filec 7689;
prueba filex 8978;

resultados:
prueba Filea 3495;
4578 prueba presentada;
prueba filec 7689;
prueba filex 8978;
prueba Filey 9978;
prueba filez 12300;

sobre la base de comparación en el último campo (campo $ 3), un nuevo contenido de archivo2 (aquí el contenido de "clave" es nuevo 8978), debe añadirse a la producción final y el contenido que es diferente en archivo2 (4578 prueba presentada en este caso) debería sustituir a una archivo1 .

aquí es donde estoy ahora:

awk '(clave NF \u003d $ NF; claves [clave] + +) (NR \u003d\u003d FNR key1 [clave] \u003d $ NF SRO; rec1 [clave] \u003d $ 0 SRO;) (siguiente Key2 [clave] \u003d $ NF ORS; rec2 [clave] \u003d $ 0 SRO;) próximo FIN (for (k en las llaves) (if (key1 [k] \u003d\u003d Key2 [k]) (print rec2 [k]) else (print rec1 [k]))) ' $ archivo1 $ archivo2> $ file1.updated

para facilitar la lectura:

awk '
NF
(
clave \u003d $ NF;
teclas [clave] + +
)
NR \u003d\u003d FNR
(
key1 [clave] \u003d $ NF ORS;
rec1 [clave] \u003d $ 0 ORS;
siguiente
)
(
Key2 [clave] \u003d $ NF ORS;
rec2 [clave] \u003d $ 0 ORS;
siguiente
)
FIN
(
para (k en las teclas)
(
if (key1 [k] \u003d\u003d Key2 [k])
(
imprimir rec2 [k]
)
algo más
(
imprimir rec1 [k]
)
)
) '
$ archivo1 $ archivo2> $ file1.updated

pero .. esto no funciona así: /
  #2 (Enlace permanente)  
Old 06-09-2008
radoulov's Avatar
radoulov radoulov is offline Forum Staff  
adicto
  
 

Fecha: enero 2007
Ubicación: Варна, България / Milán, Italia
Mensajes: 2.879
Si la orden no es importante:

(uso o nawk / usr/xpg4/bin/awk en Solaris)

Código:
awk 'END{for(k in _)print _[k]}{_[$NF]=$0}' file1 file2
De lo contrario, habida cuenta de su ejemplo:

Código:
awk 'END{for(k in _)print _[k]}{_[$NF]=$0}' file1 file2 |
  sort -k3n

Última edición por radoulov; al 06-09-2008 10:39 AM..
  #3 (Enlace permanente)  
Old 06-09-2008
Mecano mecano is offline
Usuario Registrado
  
 

Fecha: junio 2008
Publicaciones: 4
oh mi ....

muchas gracias!

Yo pensaba que la solución es algo así como guardar las claves de archivo1, archivo2 iterar sobre ellos, y luego invertir la iteración para encontrar registros que faltan ... Yo estaba muy lejos de la belleza de awk ...

si he entendido bien, awk lee los dos archivos y registros automágicamente fusionada sí misma? Esto significa que no hay necesidad de almacenar los valores de archivo1 comparar a archivo2? Beautifull ...

Dos cosas que no entiendo: la utilización de los bajo (si bien creo que significa "leer todos los registros?"), Y por qué no se FIN al final?

Sobre el tipo de comando que no fallar en el ';'? ¿Sabe usted cómo especificar 'último campo "de acuerdo con clase? ¿O es algo así como:
| Awk '(printf substr ($ NF, 1, length ($ NF) -1), $ NF \u003d ""; printf "% s \ n", $ 0)' | sort-n | awk '(printf "% s % s, \ n ", $ 0, $ 1) '| awk' ($ 1 \u003d" "; sub (/ ^ + /," "); printf"% s \ n ", $ 0) '
preferible?

Muchas gracias de nuevo radoulov ^ ^
  #4 (Enlace permanente)  
Old 06-09-2008
radoulov's Avatar
radoulov radoulov is offline Forum Staff  
adicto
  
 

Fecha: enero 2007
Ubicación: Варна, България / Milán, Italia
Mensajes: 2.879
Cita:
Publicado originalmente por Mecano View Post
[...]
si he entendido bien, awk lee los dos archivos y registros automágicamente fusionada sí misma? Esto significa que no hay necesidad de almacenar los valores de archivo1 comparar a archivo2? Beautifull ...
[...]
Se utiliza una matriz asociativa (un hash), lo que garantiza la singularidad
de la clave ($ NF en este caso) y el valor es siempre el último de los cuales se ve
(uno en el archivo2). Se asociará a cada clave ($ NF) el registro completo ($ 0) y se actualizará el valor cuando se ve la misma clave.

Cita:
Dos cosas que no entiendo: la utilización de los bajo (si bien creo que significa "leer todos los registros?"), Y por qué no se FIN al final?
Bueno, esto es un poco el estilo de escritura,
que desea que el código más legible,
puede usar esto en vez (y esto es compatible incluso con la antigua llanura Solaris awk):

Código:
awk '{
  key_record[$NF] = $0     # associate key ($NF) with entire record ($0) 
  }
END { 
  # after the entire input has been read 
  for (key  in key_record) # for every key stored
    print key_record[key]  # print the associated value
    }' file1 file2
Cita:
Sobre el tipo de comando que no fallar en el ';'?
Creo que el tipo comando emitidos correctamente. ¿Tienes un ejemplo en el que la entrada de este tipo no están ordenados correctamente?

Cita:
¿Sabe usted cómo especificar 'último campo "de acuerdo con clase?
¿O es algo así como:
| Awk '(printf substr ($ NF, 1, length ($ NF) -1), $ NF \u003d ""; printf "% s \ n", $ 0)' | sort-n | awk '(printf "% s % s, \ n ", $ 0, $ 1) '| awk' ($ 1 \u003d" "; sub (/ ^ + /," "); printf"% s \ n ", $ 0) '
preferible?
¿Por qué? No es el último campo de posición fija?
En ese caso, yo iría con:

Código:
perl -lane'
  $h{$F[-1]} = $_;
  print join "\n", map $h{$_}, sort {$a <=> $b} keys %h 
    if eof'
O (si usted realmente desea deshacerse de la "," mientras que la clasificación):

Código:
perl -lane'
  chop $F[-1] and $h{$F[-1]} = $_;
  print join "\n", map $h{$_}, sort {$a <=> $b} keys %h 
    if eof'
En caso contrario utilizando + tipo de comandos:

Código:
read<file;set -- $REPLY;sort -k$#n file
  #5 (Enlace permanente)  
Old 06-09-2008
Mecano mecano is offline
Usuario Registrado
  
 

Fecha: junio 2008
Publicaciones: 4
Muchas gracias por tomarse el tiempo para explicar todo esto radoulov ^ ^ eso es genial!

Cita:
Creo que el tipo comando emitidos correctamente. ¿Tienes un ejemplo en el que la entrada de este tipo no están ordenados correctamente?
no así en este caso particular pero recuerdo tener que tira de la "," para poder usar 'sort-n' correctamente (sin especificar una clave, tan sólo el extracto último campo con awk aplicar tipo-n al mismo. Una vergüenza 'especie' no permite invertir tecla de selección), por ejemplo, con valores como:
27384;
7384, o 384;
pero he intentado tantas cosas, Creo que esto debe seguir siendo una de mistypes / errores de mi parte o por la línea de Windows terminaciones algunos archivos parece haber (algunas se crean archivos en Windows y en Unix)?

N el último campo no es fijo porque estoy en un script bash utilidad para archivos de consultas SQL de selección y actualización, tiene que ser utilizado en varios archivos diferentes, donde el número de campos no es siempre el mismo y cuando el valor de clave puede ser , pero rara vez ocurre, en medio de la línea.
Así pues, en este caso de $ argumentos clave de clima:
awk 'FIN (for (k en _) _ impresión [k ]}{_[$'"$ clave "']\u003d$ 0)' $ archivo1 $ archivo2> $ file1.updated
con un argumento adicional condicionada a'0 'para el final de la línea (porque no he tenido $ clave para convertirse en NF y teniendo awk' "$ key").
Estoy haciendo una pequeña comunidad y tiene que ser muy simple.
Si no estás miedo de leer el código awfull puesto que puedo ^ ^
  #6 (Enlace permanente)  
Old 06-10-2008
radoulov's Avatar
radoulov radoulov is offline Forum Staff  
adicto
  
 

Fecha: enero 2007
Ubicación: Варна, България / Milán, Italia
Mensajes: 2.879
Cita:
[...]
Si no estás miedo de leer el código awfull puesto que puedo ^ ^
Sí, por supuesto, puesto que.
Usted puede obtener consejos útiles aquí.
  #7 (Enlace permanente)  
Old 09-12-2008
s.rajkumar s.rajkumar is offline
Usuario Registrado
  
 

Fecha: agosto 2008
Publicaciones: 1
Hola soy muy nuevo y unix awk, mi exigencia es muy similar a este ..

Quiero comparar por primera columna,

archivo1:
0000-00058 | Verde
0000-00059 | Verde
0000-00060 | Verde
0402-01055 | Verde
0402-01058 | Verde
0402-01059 | Verde
0402-01061 | Verde
0402-01065 | Verde



archivo2:
0000-00057 | Roja
0000-00058 | Azul
0000-00059 | Roja
0000-00060 | Azul


Mi resultado debe ser

0000-00058 |Azul
0000-00059 |Rojo
0000-00060 |Azul
0402-01055 | Verde
0402-01058 | Verde
0402-01059 | Verde
0402-01061 | Verde
0402-01065 | Verde

0000-00057 | Roja

la espera de su respuesta ...
Thank u.
Closed Thread

Marcadores

Etiquetas
solaris

Herramientas de hilo Buscar en este Hilo
Buscar en este Hilo:

Búsqueda avanzada
Modos de visualización Vota a este hilo
Vota a este hilo:

Normas de envío
puede que no nuevo puesto de hilos
puede que no enviar respuestas
puede que no enviar archivos adjuntos
puede que no editar sus puestos

Código BB es Encendido
Emoticones son Encendido
[IMG] código Encendido
Código HTML es Apagado
Trackbacks son Encendido
Pingbacks son Encendido
Refbacks son Encendido




Todas las horas son GMT -4. La hora es 02:22 AM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Traducciones de idiomas Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Estudios
El UNIX y Linux Foros Contenido Copyright © 1993-2009. Todos los derechos Reserved.Ad Gestión por RedTyger

Las direcciones URL de contenido vBSEO 3.2.0