![]() |
|
|
google unix.com
|
|||||||
| Foros | Registro | Reglas de los Foros | Enlaces | Álbumes | Preguntas más frecuentes | Lista de miembros | Calendario | Búsqueda | Puestos de hoy | Marcar Foros Como Leídos |
| 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 |
![]() |
|
|
Linkback vínculo | Herramientas de hilo | Buscar en este Hilo | Tasa de Hilo | Modos de visualización |
|
|
|
||||
|
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. |
|
||||
|
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. |
|
|||||
|
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. |
|
||||
|
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.. |
|
|||||
|
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.. |
![]() |
| Marcadores |
| Herramientas de hilo | Buscar en este Hilo |
| Modos de visualización | Vota a este hilo |
|
|