Cuando awk lee un registro de entrada, el registro es automáticamente separado o particionado por el intérprete en piezas llamadas campos. Por defecto, los campos son separados por espacios en blanco, al igual que las palabras de una frase. Los espacios en awk significan cualquier cadena de uno o más espacios y/o tabuladores; otros caracteres tales como newline, formfeed, etc … que son considerados como espacios en blanco por otros languajes no son considerados como espacios en blanco por awk.
El propósito de los campos es facilitar al usuario la referencia a las partes constituyentes de un registro (tratar las subpartes de un registro). No tienes que usarlos – puedes operar con el registro completo si es lo que deseas – pero los campos son los que hacen a los programas awk más sencillos tan potentes.
Para referirse a un campo en un programa awk, usas un signo de dólar ‘$’, seguido por el número de campo que desees. Por lo tanto, $1 se refiere al primer campo, $2 se refiere al segundo, y así sucesivamente. Por ejemplo, supón que lo siguiente es una línea del fichero de entrada:
This seems like a pretty nice example.
Aquí el primer campo, o $1, es ‘This’; el segundo campo, o $2, es ‘seems’; y así sucesivamente. Advierta que el último campo, $7, es ‘example.’. Ya que no hay espacios en blanco entre la ‘e’ y el punto final de la frase ‘.’, el punto se considera como parte del campo séptimo.
No importa cuantos campos existan, el último campo de un registro puede ser representado por $NF. Por lo que, en el ejemplo anterior, $NF sería lo mismo que $7, o lo que es lo mismo ‘example.’. Si intentas referirte a un campo más allá del último, tal como $8 cuando el registro tiene solo 7 campos, obtienes la cadena vacía.
NF, sin el dólar delante, es una variable implícita cuyo valor es el número de campos en el registro actual. $0, lo cual parece un intento de acceder al campo cero, es un caso especial: representa el registro de entrada completo. Esto es lo que usarías cuando no estuvieses interesado en campos. Aquí están algunos ejemplos más:
awk '$1 ~ /foo/ { print $0 }' Lista-BBS
Este ejemplo imprime cada registro del fichero ‘Lista-BBS’ cuyo primer campo contiene la cadena ‘foo’. El operador ‘~’ se le llama operador de encaje, búsqueda o matching; chequea si una cadena (aquí, el campo $1) encaja con una expresión regular dada. En contraste, el siguiente ejemplo:
awk '/foo/ { print $1, $NF }' Lista-BBS
busca ‘foo’ en el registro completo e imprime el primer y el último campo de cada registro de entrada que contenga el patrón ‘foo’.
0 Comentarios