The UNIX and Linux Forums  


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
Al cambiar los permisos usando FTP panknil Programación de scripts de shell y 3 11-07-2007 08:08 PM
Cambiar tu userID y cambio de grupo y GID deal732 Programación de scripts de shell y 2 04-18-2007 11:09 AM
Cambiar el orden de utilización de sed venu_nbk UNIX for Dummies Preguntas y Respuestas 9 07-29-2006 06:03 PM
Cambio de usuarios Bab00shka Programación de scripts de shell y 2 08-01-2003 05:44 AM
Cambio de IP del Hordak UNIX for Dummies Preguntas y Respuestas 2 08-03-2002 01:42 AM

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 10-04-2008
jolecanard jolecanard is offline
Usuario Registrado
  
 

Fecha: Sep 2008
Puestos: 36
Unhappy awk está cambiando mi FS!

Hola,

Aquí está (una parte) del archivo que desea cambiar. Tenga en cuenta los tres espacios antes de que el "3" (podría ser "2" o "0" también).


Código:
   3 621530  1.1935E-02 631530  1.1293E+01 641530  1.1117E-02 571540  4.4419E-14
   3 581540  2.6670E-10 591540  3.8610E-09 601540  1.1016E-06 611540  3.2618E-06
   3 611541  6.5572E-07 621540  9.8307E+00 631540  3.1177E+00 641540  1.4615E+00
   3 571550  0.0000E+00 581550  8.8139E-12 591550  1.0739E-09 601550  2.5639E-07
   3 611550  1.1011E-06 621550  3.6787E-05 631550  3.4821E+00 641550  3.1855E+00
   3 641551  0.0000E+00 581560  9.4585E-13 591560  7.5358E-11 601560  1.2023E-07
   3 611560  1.7968E-07 621560  5.4237E-04 631560  3.0054E-02 641560  6.5687E+00
   3 581570  2.3926E-14 591570  9.9322E-12 601570  4.3929E-09 611570  4.6793E-07
   3 621570  5.5911E-06 631570  6.3564E-04 641570  3.2355E+00 591580  2.8608E-13

Quiero encontrar algunos ID (por ejemplo, 621530) y cambiar el valor posterior.

Estoy usando este script:

Código:
VALUE=".........."
awk -v var="$VALUE" 'BEGIN{}
NR==FNR{a[$0]=$0; next}
{for(i=2;i<9;i+=2)if($i in a){$(i+1)=var}}
#{$1="   "$1}
{print}' ID_to_be_changed my_file

El problema es que elimina los tres espacios en el frente de la fila si cambia algo en la fila ... la eliminación de la línea comentó soluciona el problema.
Sin embargo no sé cómo mantener el mismo número de espacios entre las líneas: 2 espacios entre el ID y el valor siguiente, y 1 espacio entre un valor y después de que el ID (la secuencia de comandos todo lo convierte en un solo espacio).

¿Puede alguien ayudarme?
  #2 (Enlace permanente)  
Old 10-04-2008
vidyadhar85's Avatar
vidyadhar85 vidyadhar85 is offline Forum Staff  
Moderador (el tutor)
  
 

Fecha: junio 2008
Ubicación: INDIA
Mensajes: 1.407
conjunto OFS \u003d "" sin ninguna de los espacios que desee
  #3 (Enlace permanente)  
Old 10-04-2008
jolecanard jolecanard is offline
Usuario Registrado
  
 

Fecha: Sep 2008
Puestos: 36
Ya he intentado ...
El problema entonces es que todos mis columnas son sólo un espacio con el espacio!

Quiero mantener la estructura:

Código:
 
"   "3" "xxxxxx"  "x.xxxxExx" "xxxxxx"  "x.xxxxExx"...

  #4 (Enlace permanente)  
Old 10-04-2008
jolecanard jolecanard is offline
Usuario Registrado
  
 

Fecha: Sep 2008
Puestos: 36
Thumbs up

Por ahora, la única solución que tengo es:


Código:
 
VALUE=".........."
awk -v var="$VALUE" 'BEGIN{FS=OFS=" "}
NR==FNR{a[$0]=$0; next}
{for(i=4;i<9;i+=2)if($i in a){$(i+1)=var}}
{for(i=4;i<9;i+=2)if($i in a){print "  ",$1,$2," "$3,$4," "$5,$6," "$7,$8," "$9;next}}
{print}' ID_to_be_changed my_file

De hecho, para algunas líneas, algunos valores no tienen el formato "x.xxxxExxx", pero menos caracteres (por ejemplo, "0.0"). Luego, la falta de personajes son "espacios" para mantener el alineamiento:


Código:
   2 982520  1.6134E-14 982530  1.7241E-17 982540  3.4164E-20 982550  1.2285E-24
   2 992530  1.8708E-17 992541  6.2076E-22 992540  7.5646E-20 992550  7.0917E-22
   2 162500  7.6697E-08      0  0.0000E+00      0  0.0000E+00      0  0.0000E+00
   3  10030  2.0892E-01  30060  6.0786E-04  30070  1.3046E-05  40090  1.9438E-05
   3  40100  1.1748E-04  60140  1.6964E-05 280660  0.0000E+00 290660  1.4066E-14
   3 300660  5.0403E-09 290670  7.6644E-19 300670  2.4718E-10 300680  1.1002E-12

Mi solución funciona siempre y cuando no me cambio de valores situada en las filas de "reducido" personajes ... (siempre que no se cambiará nada en la fila, awk no vuelva a concatenar la fila, por lo tanto, conservar el derecho de espaciamiento).

Además, el uso de todos los argumentos en la impresión no es conveniente ...

¿Cómo podría solucionar estos dos problemas?
  #5 (Enlace permanente)  
Old 10-04-2008
Franklin52 Franklin52 is offline Forum Staff  
Moderador
  
 

Fecha: febrero 2007
Mensajes: 4.333
Puede usar printf para imprimir la línea con un formato fijo, algo así como:


Código:
VALUE=".........."
awk -v var="$VALUE" 'BEGIN{FS=OFS=" ";fmt="%5s%7s%12s%7s%12s%7s%12s%7s%12s\n"}
NR==FNR{a[$0]=$0; next}
{for(i=4;i<9;i+=2)if($i in a){$(i+1)=var}}
{for(i=4;i<9;i+=2)if($i in a){printf(fmt,$1,$2,$3,$4,$5,$6,$7,$8,$9);next}}
{print}' ID_to_be_changed my_file

Recuerdos
Closed Thread

Marcadores

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 01:51 PM.


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