![]() |
Hola y bienvenida de los Estados Unidos a la UNIX y Linux Foros! Gracias por su visita y formar parte de nuestra comunidad global.
|
|
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 problema | paddock | Programación de scripts de shell y | 2 | 09-23-2008 11:15 AM |
| problema de bucle | mdap | Programación de scripts de shell y | 3 | 08-16-2008 02:27 PM |
| Problema en el caso de loop | El Observador | Programación de scripts de shell y | 2 | 05-28-2008 03:43 AM |
| Problema con el bucle while y SQL | nandajk | UNIX for Dummies Preguntas y Respuestas | 20 | 05-04-2007 07:19 AM |
| problema con el bucle while | Mridula | Programación de Alto Nivel | 1 | 12-11-2005 11:44 AM |
![]() |
|
|
Linkback vínculo | Herramientas de hilo | Buscar en este Hilo | Tasa de Hilo | Modos de visualización |
|
|
|
||||
|
Doble bucle while problema
Hola a todos, he encontrado un extraño problema con el doble bucle while. El objetivo de los dos, mientras que los bucles es comparar 2 archivos, tmplist.txt es el archivo de referencia con la lista completa de servidores. Por favor vea el cuadro adjunto de la lógica y la relación entre la entrada y salida.
2 mientras que los bucles deben búsqueda en los servidores / test.CSV en el / tmplist.txt, línea por línea. Por ejemplo, el primer tema de la búsqueda / test.CSV server2 en / tmplist.txt, a partir de la primera línea en / tmplist.txt (LINENUM \u003d 1), si no encontró entonces una salida 'NA' y luego pase a la siguiente línea en / tmplist.txt hasta que encuentra la adecuación server2, LINENUM y actualizar al mismo tiempo. Otras procederá a buscar en el siguiente servidor server3 en / de la tmplist.txt línea actual en adelante (desde todos los servidores siempre están enumerados en el orden alphabatic). La variable LINENUM (el indicador de número de línea) utilizados en el interior del bucle while. Es predefinido como 1, si después de la condición if [$ SERVER \u003d $ Refs] es cierto, se LINENUM incremento y, a continuación, salir del bucle while interno y continuar en el exterior bucle while. Sin embargo, en el exterior, mientras que bucle, cada vez que los bucles y lee SERVIDOR COUNT, el LINENUM se inicia desde el valor inicial de 1 de nuevo en lugar de incrementar la LINENUM procedentes del interior bucle while. A continuación se muestra parte del programa con los detalles de 2 mientras que los bucles. Podría ayudar a alguien que me explique lo que está mal aquí? Este es mi primer UNIX asignación, que agradecemos su ayuda! #! / bin / bash TYPE \u003d P2PS LINENUM \u003d 1 mientras que leer SERVIDOR COUNT; hacer gato tmplist.txt | mientras que leer LÍNEA; hacer Refs \u003d $ (cabeza - $ LINENUM tmplist.txt | tail -1) if [$ SERVER \u003d $ Refs] y, a continuación, dejar LINENUM + + echo-n "," $ COUNT>> t.csv romper algo más dejar LINENUM + + echo-n ", NA">> t.csv continuar fi hecho hecho <test.CSV |
|
||||
|
No hay necesidad de 2 bucles, tienes que usar comandos unix poderoso en sus escrituras, al igual que grep. Esto debería funcionar:
Por supuesto, t.csv debe estar vacía antes de ejecutar el script. mientras que leer LÍNEA hacer Aux \u003d $ (grep $ test.CSV LÍNEA) if [[! -z $ auxiliares]] entonces echo "$ a los">> t.csv algo más echo "NA">> t.csv fi hecho <tmplist.txt |
|
||||
|
la lectura en el interior del bucle es un subproceso. Todos los valores de las variables establecidas o cambiado en el interior del bucle interior no se conocen fuera de él. Si los archivos son pequeños tratan de intercambio al mismo tiempo-en contra de la construcción de un bucle for. Si no, almacenar meta-información en el centro de archivos en bucle para que fuera. Pero esto puede disminuir la velocidad mucho.
Pero en realidad no veo la necesidad de doble bucle. ¿Por qué no grep tmplist.txt de cada línea en el primer archivo? |
|
||||
|
Una solución con awk:
Código:
awk '
NR==FNR{a[$1]=$2;next}
$0 in a{print $0,a[$0];next}
{print "NA"}
' test.csv tmplist.txt > t.csv
|
|
||||
|
Muchas gracias por sus respuestas! Realmente poderosos comandos!
Mi script funciona ahora. Gracias a todos! |
![]() |
| Marcadores |
| Etiquetas |
| comandos unix |
| Herramientas de hilo | Buscar en este Hilo |
| Modos de visualización | Vota a este hilo |
|
|