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
bucle while dentro de bucle while panknil Programación de scripts de shell y 0 01-07-2008 12:49 PM
Bucle for xramm HP-UX 3 10-10-2007 03:20 PM
Si bien Bucle hemangjani Programación de scripts de shell y 2 11-02-2006 11:01 AM
bucle for munnabhai1 Programación de scripts de shell y 3 04-06-2006 03:30 PM
cómo obtener la función similar en el bucle while o bucle for trynew Programación de scripts de shell y 3 06-17-2002 12:09 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 08-28-2007
baghera baghera is offline
Usuario Registrado
  
 

Fecha: agosto 2007
Puestos: 23
Si bien en bucle con awk

Hola, recientemente he publicado en otro hilo iniciado por mí . Sin embargo, en un esfuerzo por hacer que mi guión más hermoso que he estado pensando mientras abbout bucles.

Dirigir mi script con el comando:

sh script 4 numbers.txt

Y mi script es como este:


Código:
data=`cat $2 | xargs -n $1`

#echo $data

columns=$1
i=1

while columns>0
do
	awk_cmd=`awk '{sum+=$i} END {print "\n" sum/NR}'`
   	echo "$data | $awk_cmd"
	i=`expr $i + 1`
	columns=`expr $columns - 1`
done

El punto de la secuencia de comandos es para tener una lista ($ 2) y producir $ 1 el número de columnas y, a continuación, imprimir el promedio de cada columna. Pero me sale un mensaje de error al ejecutar la secuencia de comandos:

columnas: no se encuentra

Y no veo el problema. Tal vez hay otros problemas con el guión también. Por favor, me ilumina.
  #2 (Enlace permanente)  
Old 08-28-2007
robotronic's Avatar
robotronic robotronic is offline Forum Advisor  
¿Puedo jugar con locura?
  
 

Fecha: abril 2002
Lugar: Italia
Puestos: 370
En primer lugar, las condiciones de la prueba está mal. Utilice este:


Código:
while [ "$columns" -gt 0 ]

En segundo lugar, si desea pasar la "$ i" valor a awk intente esto:


Código:
awk_cmd=`awk -v i=$i '{sum+=i} END {print "\n" sum/NR}'`

  #3 (Enlace permanente)  
Old 08-28-2007
baghera baghera is offline
Usuario Registrado
  
 

Fecha: agosto 2007
Puestos: 23
Bueno yo lo hice como usted ha dicho:


Código:
data=`cat $2 | xargs -n $1`

#echo $data

columns=$1
i=1
echo $columns

while [ "$columns" -gt 0 ]
do
	awk_cmd=`awk -v i=$1 '{sum+=$i} END {print sum/NR}'`
   	echo "$data | $awk_cmd"
	i=`expr $i + 1`
	columns=`expr $columns - 1`
done

Pero luego me sale este tipo de error:

>> Sh reader4 4 testfil.txt
awk: error de sintaxis cerca de la línea 1
awk: rescate cerca de la línea 1
2 2 1 1
1 1 1 1 |
awk: error de sintaxis cerca de la línea 1
awk: rescate cerca de la línea 1
2 2 1 1
1 1 1 1 |
awk: error de sintaxis cerca de la línea 1
awk: rescate cerca de la línea 1
2 2 1 1
1 1 1 1 |
awk: error de sintaxis cerca de la línea 1
awk: rescate cerca de la línea 1
2 2 1 1
1 1 1 1 |

Lo que quiero es que se pasa a través de cada columna en cada ejecución en el bucle while e imprime el medio correspondiente. Pero realmente apreciamos la ayuda, he estado en algunos foros donde te slammered porque, quizá, las preguntas estúpidas.
  #4 (Enlace permanente)  
Old 08-28-2007
aigles's Avatar
Aigles aigles is offline Forum Advisor  
Usuario Registrado
  
 

Fecha: abril 2004
Ubicación: Burdeos, Francia
Mensajes: 1.433
Usted no necesita el awk_cmd comando:

Código:
data=`cat $2 | xargs -n $1`

#echo $data

columns=$1
i=1
echo $columns

while [ "$columns" -gt 0 ]
do
   	echo "$data" | awk -v i=$1 '{sum+=$i} END {print sum/NR}'
	i=`expr $i + 1`
	columns=`expr $columns - 1`
done

Si desea que le mantenga, debe utilizar el eval comando:

Código:
	awk_cmd="awk -v i=$1 '{sum+=$i} END {print sum/NR}'"
	echo "$data" | eval $awk_cmd

Jean-Pierre.
  #5 (Enlace permanente)  
Old 08-28-2007
baghera baghera is offline
Usuario Registrado
  
 

Fecha: agosto 2007
Puestos: 23
Gracias Jean-Pierre, ahora no tengo ningún error. Pero la salida es raro.

Si tengo la lista:

1
2
1
2

Esto produciría:
1 2
1 2

Así que la salida debe ser 1 y 2 (1 +1 / 2 y 2 +2 / 2), así:
1
2

Pero en vez me

2
2

Algo está mal con la forma en que voy de este problema.

echo "$ datos" | awk-vi \u003d $ 1 '(suma + \u003d $ i) END (print sum / NR)'

¿Hay algo malo con el uso de NR aquí? Pero poner un número, no parece ayudar. He intentado con 2 en lugar de la NR, pero (igual que la anterior lista), pero todavía tengo:

2
2

¿Hay un problema con la división que hago?

Edit: Acabo de datos y se hizo eco de la producción viene en una línea de 1 2 1 2 es probablemente el fin tiene algo que ver con mi problema.

Última edición por baghera; al 08-28-2007 02:50 PM..
  #6 (Enlace permanente)  
Old 08-28-2007
vgersh99's Avatar
vgersh99 vgersh99 is online now Forum Staff  
Moderador
  
 

Fecha: febrero 2005
Localización: Boston, MA
Mensajes: 5.131
Yo no entiendo por qué tranquilidad que necesita todo el código cuando se puede hacerlo todo en awk:

nawk-f bag.awk miarchivo

bag.awk:

Código:
{
   for(i=1; i<=NF; i++)
       sum[i] += $i
   nf=NF
   nr=NR
}

END {
    for(i=1; i<=nf; i++)
        print sum[i]/nr
}


Última edición por vgersh99; al 08-28-2007 03:14 PM..
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 04:19 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