Estoy experimentando un error extraño (no es un error) con AWK
Estaba trabajando con un archivo de texto llamado countries
cuyo contenido es el siguiente:
USSR 8649 275 Asia
Canada 3852 25 América del Norte
China 3705 1032 Asia
USA 3615 237 América del Norte
Brasil 3286 134 América del Sur
India 1267 746 Asia
México 762 78 América del Norte
Francia 211 55 Europa
Japón 144 120 Asia
Alemania 96 61 Europa
Inglaterra 94 56 Europa
Estoy tratando de hacer funcionar el siguiente patrón de rango:
awk '/Europa/, /Asia/' countries
que se supone que imprime cada línea desde la primera aparición de la palabra “Europa” hasta la primera aparición de la palabra “Asia”.
Entonces el resultado que esperaba era este:
Francia 211 55 Europa
Japón 144 120 Asia
Pero en lugar de eso, obtengo este resultado:
Francia 211 55 Europa
Japón 144 120 Asia
Alemania 96 61 Europa
Inglaterra 94 56 Europa
como si el segundo patrón no se estuviera cumpliendo. ¿Qué está sucediendo?
davy.ai
Como experto en IT especializado en awk, puedo explicar que el comando
awk '/Europe/, /Asia/' countries
coincide con cada línea que comienza desde la primera aparición de la palabra “Europe” y termina en la primera aparición de la palabra “Asia”. Sin embargo, dado que la palabra “Europe” también aparece después de la palabra “Asia” en el archivo, awk continúa imprimiendo líneas hasta llegar al final del archivo.Para limitar la coincidencia de patrones a la primera aparición de la palabra “Asia”, debes agregar una condición adicional para detener el procesamiento del archivo una vez que se encuentre la primera coincidencia con “Asia”. Puedes lograr esto utilizando el comando
next
para saltar el procesamiento de las líneas restantes después de la primera coincidencia con “Asia”.El comando corregido es:
Esto generará el resultado esperado:
¡Espero que esto te sea útil!